- 论坛徽章:
- 0
|
iconv的功能可算强大,可以对文本进行编码间的转换,它支持世界上很多的语言,当然我们主要用它来处理中文各种编码之间的转换,libiconv是一个开源的开发包,使用它可以非常方便的开发出适合自己用的编码转换工具。在这里
http://gnuwin32.sourceforge.net/packages/libiconv.htm
可以下载到libiconv的文档和开发包。
Libiconv的使用比较简单,只有3个函数
1)iconv_t iconv_open (const char* tocode, const char* fromcode);
2)size_t iconv (iconv_t cd, const char* * inbuf , size_t * inbytesleft, char* * outbuf , size_t * outbytesleft);
inbytesleft:输入(inbuf)的字符串长度;
outbytesleft:这边变量必须带入一个长度,是outbuf所指向的缓冲区长度(如1000),输出的是剩余没用到的缓冲区长度(如200,说明转换结果是800个字节)
inbuf, outbuf:返回时指针都后移了,需要注意。
3)int iconv_close (iconv_t cd);
程序片段如下:
iconv_t cd;
size_t inleft;
size_t outleft = BUF_LEN;
char from_encoding[20], to_encoding[20];
char inbuf[BUF_LEN];
char *pin = inbuf;
unsigned char outbuf[BUF_LEN];
unsigned char *pout = outbuf;
int outlen;
cd = iconv_open(to_encoding, from_encoding);
memset(inbuf, 0, sizeof(inbuf));
memset(outbuf, 0, sizeof(outbuf));
strcpy(inbuf, "来看看记得分是");
inleft = strlen(inbuf);
if((rv = iconv(cd, (const char **)&pin, &inleft, (char **)&pout, &outleft)) == -1)
{
iconv_close(cd);
return -1;
}
outlen = BUF_LEN - outleft;
iconv_close(cd);
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/97267/showart_1944681.html |
|