c++跨平台编码问题

2018-06-17 22:04:21来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

最近要将一个windows下的项目放到树莓派上,以便充分利用带宽资源,使其以夜继日的工作

在此记录一下编码问题和方案

 

在windows下,现在用的vs2015,创建的代码文件默认编码是ANSI,windows特有的概念,本地编码,结合实际情况就是gb232

vs在调试的时候,方便查看的有ANSI编码和unicode编码

在代码中,

以"你好,world"表示ANSI编码字符串

L"hello,世界"表示unicode编码字符串

以上两种表达方式,不受代码文件本身的编码方式影响

也就是说,windows下的代码源文件与文件的编码格式无关,在vs插件开发时候,实践中感受到的编码是unicode

 

对于linux编程,代码文件默认编码是utf8

在代码中,

以"你好,world"表示的字符串,编码以此文件的编码为准

对于L"hello,世界",本人未测试

在linux下,如果代码中出现中文,那么就必须使用utf8编码,否则一定编译报错

 

对于代码中没有非ancii编码字符的源码文件,ANSI和utf8都没什么问题

但如果出现中文,就出现了各种问题,针对上面的那些特性,采取了以下解决方案

 

 

源代码文件统一utf8编码,对于vs有一个插件可用 ForceUTF8 

 

代码中的常量字符串统一为L"hello,世界"的unicode编码方式

 

同时,为了方便操作,给出utf8和unicode操作宏,方便utf8和unicode的字符串编码转换

在程序中,不要出现utf8和unicode以外的编码,

如果使用了非ascii码之外字符,比如汉字,一定使用L"hello,世界"格式,或者utf8(L"hello,世界")

如果只是使用了ascii码之内字符,"你好,world",L"hello,世界"都可以

 

参数常量等设计,首先unicode,其次utf8

unicode无论在识别和还是在调试查看上,都很方便

 

更改,添加于2017/08/28

之前鉴于需要在程序中使用中文,所以过于执着中文的支持

现在处理另一个问题,得到如果下新结论

不再使用插件

让vs自己保存编码,即为ansi,这样vs会很舒服

中文只能出现在注释里

在有效代码中,只能有标准ascii

如果程序要求中文

那么到配置文件中去读取,然后再使用(多语言版本的实现也在于此)

这样跨平台的问题完美解决

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:关路灯,洛谷dp

下一篇:P1151 子数整数