qstring乱码 qt4_QString乱谈(2) &QT 5 中文乱码问题

长期以来,很多人都清楚,一旦C++源码中直接使用了中文,这样的源码想要跨平台(I18N)会非常困难。

随着:Windows下:MSVC2010成为主流

Linux下:GCC升级到4.6

C++中的中文问题 才算有了一个比较优雅的、跨平台的Workaround。

(本文讨论编译器范围:GCC4.6+, MSVC2010sp1+ 。本文属于QString系列,但暂不涉及QString)

C++ 中文问题

要在C++中正确使用中文,必须要了解下面两个概念:源码字符集(the source character set)源码文件是使用何种编码保存的

执行字符集(the execution character set)可执行程序内保存的是何种编码(程序执行时内存中字符串编码)

C++98的问题: 既没有规定源码字符集,也没有规定执行字符集

这个... 如何理解?不妨看个例子

例子

这个要求高么?一个简单的C++程序,只是希望它能在简体中文Windows、正体中文Windows、英文版Windows、Linux、MAC OS...下的结果一致。

//main.cppint main(){    char mystr[] = "老老实实的学问,来不得半点马虎";    return sizeof mystr;}

可以试着反问自己两个问题这个源码文件是何种编码保存的?(有确定答案么?)

mystr中是什么内容?(有确定答案么?)

对C++来说,这两个都不确定。固定平台的话,还能忍忍

要跨平台的话,这种东西...

GCC

在GCC下,这两个都可以使用你自己喜好的编码(如果不指定,默认都是UTF8)-finput-charset=charset-fexec-charset=charset

除了前两个选项外,还有一个:-fwide-exec-charset=charset

wide? 不妨先猜一下它是干嘛的

MSVC

MSVC没有类似前面的选项。源码字符集如何解决?有BOM么,有则按BOM解释,无则使用本地Locale字符集(随系统设置而变)

执行字符集如何解决?使用本地Locale字符集(随系统设置而变)

挺霸道哈(当然,源码中可以使用#pragma setlocale("..."),但

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值