linux c字符串转utf-8,linux下c语言利用iconv实现utf-8转unicode

#include

#include

#include

#include

int main(int argc, char **argv)

{

/* 目的编码,

TRANSLIT:遇到无法转换的字符就找相近字符替换

*    IGNORE

:遇到无法转换字符跳过*/

//char *encTo =

"UNICODE//TRANSLIT";

char *encTo =

"UNICODE//IGNORE";

/* 源编码 */

char *encFrom =

"UTF-8";

/* 获得转换句柄

[email protected]

encTo 目标编码方式

[email protected] encFrom

源编码方式

*

* */

iconv_t cd =

iconv_open (encTo, encFrom);

if (cd ==

(iconv_t)-1)

{

perror

("iconv_open");

}

/* 需要转换的字符串 */

char inbuf[1024] = "abcdef哈哈哈哈行";

size_t srclen = strlen (inbuf);

/* 打印需要转换的字符串的长度

*/

printf("srclen=%d\n", srclen);

/* 存放转换后的字符串 */

size_t outlen =

1024;

char outbuf[outlen];

memset (outbuf, 0,

outlen);

/* 由于iconv()函数会修改指针,所以要保存源指针 */

char *srcstart =

inbuf;

char *tempoutbuf = outbuf;

/* 进行转换

[email protected] cd

iconv_open()产生的句柄

[email protected] srcstart

需要转换的字符串

[email protected] srclen

存放还有多少字符没有转换

[email protected] tempoutbuf

存放转换后的字符串

[email protected] outlen

存放转换后,tempoutbuf剩余的空间

*

*

*/

size_t ret = iconv (cd, &srcstart, &srclen,

&tempoutbuf, &outlen);

if (ret ==

-1)

{

perror

("iconv");

}

printf ("inbuf=%s, srclen=%d,

outbuf=%s, outlen=%d\n", inbuf, srclen, outbuf, outlen);

printf

("print outbuf: ");

int i;

for (i=0; i<24;

i++)

{

printf("%2c",

outbuf[i]);

}

printf("\n");

/* 关闭句柄 */

iconv_close (cd);

return 0;

}

下面做了一下函数的封装

#include

#include

#include

#include

int char_convert (char *encTo, char *encFrom, char *inbuf, size_t inlen, char

*outbuf, size_t outlen)

{

/* 获得转换句柄

[email protected] encTo 目标编码方式

[email protected]

encFrom 源编码方式

**/

iconv_t cd = iconv_open (encTo, encFrom);

if (cd ==

(iconv_t)-1)

{

perror ("iconv_open");

}

/* 由于iconv()函数会修改指针,所以要保存源指针 */

char *srcstart = inbuf;

char

*tempoutbuf = outbuf;

/*进行转换

[email protected] cd iconv_open()产生的句柄

[email protected] srcstart

需要转换的字符串

[email protected] inlen 存放还有多少字符没有转换

[email protected] tempoutbuf

存放转换后的字符串

[email protected] outlen 存放转换后,tempoutbuf剩余的空间

**/

size_t ret = iconv

(cd, &srcstart, &inlen, &tempoutbuf, &outlen);

if (ret ==

-1)

{

perror ("iconv");

}

printf ("inbuf=%s, inlen=%d,

outbuf=%s, outlen=%d\n", inbuf, inlen, outbuf, outlen);

/* 关闭句柄

*/

iconv_close (cd);

return inlen;

}

#if 0

int main(int argc, char **argv)

{

/* 目的编码,

TRANSLIT:遇到无法转换的字符就找相近字符替换

* IGNORE :遇到无法转换字符跳过*/

//char *encTo =

"UNICODE//TRANSLIT";

char *encTo = "UNICODE//IGNORE";

/* 源编码

*/

char *encFrom = "UTF-8";

/* 需要转换的字符串 */

char inbuf[1024] =

"发送打法abcdef哈哈哈哈行";

size_t inlen = strlen (inbuf);

/* 打印需要转换的字符串的长度

*/

printf("inlen=%d\n", inlen);

/* 存放转换后的字符串 */

size_t outlen = 1024;

char

outbuf[outlen];

memset (outbuf, 0, outlen);

char_convert (encTo, encFrom, inbuf, inlen, outbuf, outlen);

printf

("print outbuf: ");

int i;

for (i=0; i<24;

i++)

{

printf("%2c", outbuf[i]);

}

printf("\n");

encFrom = "UNICODE";

/* 源编码 */

encTo =

"UTF-8//IGNORE";

char_convert (encTo, encFrom, outbuf, inlen, inbuf,

outlen);

printf ("print outbuf2: ");

for (i=0; i<24;

i++)

{

printf("%2c", inbuf[i]);

}

printf("\n");

}

#endif

原文:http://www.cnblogs.com/etangyushan/p/3753847.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值