linux iconv函数失败,linux下转格式函数iconv段错误

今天将windows代码移植到Linux下,其中用到了Unicode转char的函数,被坑了一会,相关函数及编码格式,Linux与windows不同,有几点需要注意:

1、wchar_t 在Linux下占用4个字节,在windows下占2个字节;

2、Linux默认的文本编码方式是UTF-8;Linux终端汉字显示的设置方式:vi /etc/sysconfig/i18n;

设置LANG=“en_US.UTF-8”或者LANG=“zh_CN.UTF-8”;

3、iconv函数的调用方式:

iconv(iconv_t en, char** inbuf, size_t inlen, char** outbuf, size_t outlen);

段错误引发的关键之处就在这里了。

对于输入buffer与输出buffer,我之前用的是数组:strin[N][strlen];而我每次只处理二维数组中的一个数组,于是inbuf = (char**)(&strin[i]);

outbuf也是以类似的方式定义的,这样执行下去就一直报段错误,或者说segment error;

修改成这样就行了:

char* intemp = strin[i];

inbuf = &intemp;outbuf也以类似的方式定义及解决问题。

4、Linux还有一个系统小工具iconv,

可以通过指令

iconv --list

来看Linux支持哪些文本格式,Unicode格式的名字可以填:UNICODE、UCS-2

还可以通过指令:

iconv -f UCS-2 -t UTF-8 test.txt -o output.txt

来测试格式转码是否能成功。

指令的含义:

iconv -f from_encoding -t to_encoding inputfile -o outputfile

5、另外还有个问题,在windows下通过tinyxml写XML文本,需要指定GBK格式,而在Linux下通过tinyxml写XML文件需要指定UTF-8编码;否则生成的XML文件为乱码。

原文:http://blog.csdn.net/u011757360/article/details/38445429

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值