C++ linux中文乱码

装好Ubuntu Kylin后,将windows代码拷贝到ubuntu下,发现如下问题

l  中文注释无法正常显示。

l  运行过程中,中文字符串比较失败。

百思不得骑姐。在查阅一番资料,多次测试后,确定这都是字符集的问题。

1.    中文注视无法正常显示

windows的默认编码方式是Ansi,而Ubuntu Kylin字符集默认是utf-8。字符集的不同直接导致ubuntu无法正常显示从widnows拷贝过来的中文。 有两种解决方式

Ø  将代码文件的编码方式转成utf-8,建议带上bom。很多工具都可以转换,比如记事本,EditPlus。

Ø  由于ANSI中文使用的是GB2312编码,让ubuntu支持GB2312。就可以正常显示中文。具体方法如下

1)    修改/var/lib/locales/supported.d/local文件,在文件中添加

zh_CN.GBK GBK

zh_CN.GB2312 GB2312

2)    sudo dpkg-reconfigure --forcelocales

然后在输出的结果中会出现

zh_CN.GB2312 done

zh_CN.GBK done

出现done就成功了

3)    用户的配置文件.profile中添加

export LANG=zh_CN.gbk

2.    中文字符串比较失败

有时候代码中需要与配置文件内的中文进行比较。当代码文件与配置文件的中文编码方式不一致时,就会出现比对失败。相同的中文进行对比居然不一样,这是编码方式在捣鬼。保证编码方式一致即可。

建议: 如果项目要跨平台,建议大家将代码文件的编码方式统一成UTF-8带bom。这样widnows和linux都可以识别。程序也就不会有那么多莫名其妙的问题。

备注:

       Unicode:万国码,包含所有目前所有的文字及符号。他的编码方案包括UTF-8, UTF-16, UTF-32。一般unicode默认是utf-16。

       UTF-8:多字节编码,用1-4个字节来描述字符

       UTF-16:双字节编码,可能为2个字节或4个字节。

       UTF-32:四字节编码, 用4个字节来表示字符。

       ASCII:美国信息交换标准, 用于表示英文相关, 1个字节

       ANSI:美国国家标准协会,第一个字节同ASCII,后面由各个国家自己补充。需要注意的是不同国家的ANSI不兼容。中文采用GB2312编码。

       GB2312:中文编码方式,包含6763个汉字,以及其他一些符号。

       GBK:GB2312的超集。 包含了古汉字、繁体等其他一些内容。

       Bom头:用于标识文件编码方式,非必须

       详细一些信息大家可以参考雪儿浅浅的博客,总结的很好       http://blog.sina.com.cn/s/blog_4aa887440101arks.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值