linux字符集转化——解决win文件在linux下乱码

windows下的文件传到linux中,在linux中查看可能会出现乱码,因此必须要考虑linux字符集转化。

转化方法如下三步:

step1:
iconv_open(目标字符集,源字符集)

step2:

iconv()实现字符集转化

step3

iconv_close()关闭iconv

转化代码如下:

int gbk2utf8(char *src, size_t *srclen, char *dest, size_t *destlen)
{
iconv_t cd = iconv_open("UTF8", "GBK");//源字符串为GBK,目标为UTF8
if(cd == (iconv_t)-1)
{
printf("open iconv error %s\n", strerror(errno));
return -1;
}


size_t rc = iconv(cd, &src, srclen, &dest, destlen);//将src字符串转化为目标dest
if(rc == (size_t)-1)
{
printf("iconv error %s\n", strerror(errno));
return -1;
}
iconv_close(cd);
return 0;
}


int main(int arg, char *args[])
{
if(arg < 2)
return -1;
FILE *p = fopen(args[1], "r");
if(p == NULL)
{
printf("open %s error, %s\n", args[1], strerror(errno));
return -1;
}


char buf[1024];//定义一个buffer,存放读取到文件的内容
char destbuf[1024];//定义一个buffer,存放转换完字符串后的内容


while(1)//读取文件内容
{
memset(buf, 0, sizeof(buf));
memset(destbuf, 0, sizeof(destbuf));
if(fgets(buf, sizeof(buf), p) == NULL)//读取一行,如果是文件最后一行,循环退出
{
break;
}


size_t srclen = strlen(buf);
size_t destlen = sizeof(destbuf);
gbk2utf8(buf, &srclen, destbuf, &destlen);
printf("%s", destbuf);
}
fclose(p);
return EXIT_SUCCESS;
}


猜你喜欢

转载自blog.csdn.net/zangyongcan/article/details/52263846