又到乱码时

每个程序员都绕不过去的坎,而且一直如影随形。看上去很小的问题,但折腾起来很费时间。因为编码在输入、处理、输出这一系列的过程中,涉及的环节太多了,任何一环不一致,都可能导致现实乱码。

本来我都学聪明了,经历过那么多坑。我将所有字符集都使用utf8,这样就不会有乱码啦。可惜事与愿违。现在又让我赶上了。

事情起因是这样的。我使用云服务器CentOS系统,默认字符集en_US.utf8,我用win7上的notepad++做编辑器,也是设置为utf8,使用putty远程上去makefile,然后运行。putty也设置的是utf8,但printf打印的中文是乱码。

我觉得很奇怪啊,c程序不管什么字符集的啊,它眼里只有二进制数据啊。我从开始到最后全部用的utf8编码,在什么地方出岔子?我把中间过程的字符串按字节打印出来,又把代码文件中字符串用16进制view查看,分别对照比较,并看他的ansi、utf8分别是什么值。这种看内存中值是什么,以及怎么变化的,让乱码无处藏身。慢慢我就找到原因:代码中的常量字符串,它居然是ansi的! 也就是gb2312编码。我在win7上用notepad++,然后ftp连上centos编辑代码,定义的字符串常量居然是ansi的!!我iconv转成utf8后printf就OK了

对付乱码的问题,首先是基本知识要搞清楚,字符集的概念;然后是各个环节的转换,要保持一致,出现问题逐步排查,看是哪个环节出现问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值