当前位置: 技术问答>linux和unix
linux下iconv无法实现字符集的转换
来源: 互联网 发布时间:2016-02-16
本文导语: 下面是我的代码 #include #include #include int main() { size_t inlen; size_t outlen; iconv_t cd = iconv_open("GB2312","UTF8"); printf("%dn",cd); char *buf1 = new char(5); buf1[0]= 'a'; buf1[1]= 'b'; buf1[2]= 'c'; ...
下面是我的代码
#include
#include
#include
int main()
{
size_t inlen;
size_t outlen;
iconv_t cd = iconv_open("GB2312","UTF8");
printf("%dn",cd);
char *buf1 = new char(5);
buf1[0]= 'a';
buf1[1]= 'b';
buf1[2]= 'c';
buf1[3]= 'd';
buf1[4]= 0x0;
printf("%sn",buf1);
char *buf2 = new char(10);
memset(buf2,'',10);
size_t si;
inlen = 4;
si = iconv(cd,&buf1,&inlen,&buf2,&outlen);
printf("%d ++ %s",si,buf2);
iconv_close(cd);
return 0;
}
转换出来后,buf1 和 buf2里面的内容都为空。请知道原因的赐教。。
另:在命令提示符下输入iconv -l可以显示出相应的字符集名称
iconv命令能够正确转换,就是在编程中不成功。
#include
#include
#include
int main()
{
size_t inlen;
size_t outlen;
iconv_t cd = iconv_open("GB2312","UTF8");
printf("%dn",cd);
char *buf1 = new char(5);
buf1[0]= 'a';
buf1[1]= 'b';
buf1[2]= 'c';
buf1[3]= 'd';
buf1[4]= 0x0;
printf("%sn",buf1);
char *buf2 = new char(10);
memset(buf2,'',10);
size_t si;
inlen = 4;
si = iconv(cd,&buf1,&inlen,&buf2,&outlen);
printf("%d ++ %s",si,buf2);
iconv_close(cd);
return 0;
}
转换出来后,buf1 和 buf2里面的内容都为空。请知道原因的赐教。。
另:在命令提示符下输入iconv -l可以显示出相应的字符集名称
iconv命令能够正确转换,就是在编程中不成功。
|
在调用iconv之前加上
outlen = 10即可
还有一个问题, iconv 会改变buf2的值,所以需要先保存起来!
可以参考下面的一个例子:
#include
#include
#include
int main(void)
{
size_t i, j;
size_t m, n, r;
iconv_t cd;
char s[] = "中华人民共和国";
char *p;
char *q;
char s2[80];
memset(s2, 0, 80);
m = strlen(s1);
n = 80;
p = s1;
q = s2;
cd = iconv_open("utf-8", "GB2312");
r = iconv(cd, &p, &m, &q, &n);
if (r >= 0)
{
for (i = 0; i
outlen = 10即可
还有一个问题, iconv 会改变buf2的值,所以需要先保存起来!
可以参考下面的一个例子:
#include
#include
#include
int main(void)
{
size_t i, j;
size_t m, n, r;
iconv_t cd;
char s[] = "中华人民共和国";
char *p;
char *q;
char s2[80];
memset(s2, 0, 80);
m = strlen(s1);
n = 80;
p = s1;
q = s2;
cd = iconv_open("utf-8", "GB2312");
r = iconv(cd, &p, &m, &q, &n);
if (r >= 0)
{
for (i = 0; i