读书人

跨平台编码有关问题

发布时间: 2012-11-04 10:42:42 作者: rapoo

跨平台编码问题
windows上一般用多字节(MBCS)或Unicode16, 但是Linux, Mac, ios一般都是用UTF8,跨平台编码时怎么解决这个问题?

a. 用宏定义(UTF8, Unicode16, MBCS),根据定义的宏选择编码方式。
评价:感觉不太现实,太复杂。

b. 根据宏定义,Windows上统一用Unicode16,其他平台统一用UTF8。
评价:代码中充满了判断平台相关的代码,不好编码和维护。

c. 统一用UTF8。
评价:对于类似char* p = "好Hello"这样的代码,Linux上可以直接编译成UTF8,Windows上VC却做不到。当然C++11里用u8"好Hello"这样来实现,但是并不是所有编译器都支持C++11。
VC编译器只支持MBCS或是Unicode16,UTF8是不是意味着我们只能选择MBCS设置? 另外,统一用UTF8意味着windows上的API调用时都要转换。
当然,跨平台开发时,平台相关的东西我们首先要剥离封装出来,然后统一传入字符串都是UTF8类型的。

不知道一般跨平台的程序是怎么解决这个问题的,希望有相关经验的朋友指教。

[解决办法]
推荐使用ConvertZ软件
[解决办法]
大部分系统都支持 unicode-16吧。
[解决办法]

C/C++ code
whar_t unicodestring[] = L"hello world";
[解决办法]
都用Unicode编码~
[解决办法]
文件里的字符是什么编码取决于你终端输入的是什么, 比如secureCRT是gbk编码, 那么输入的就是gbk, secureCRT是utf-8编码,那么输入的就是utf-8。
[解决办法]
不统一是正常的、现实存在的;
统一是不正常的、太理想化的。
[解决办法]
boost::local::covn::to_utf<char>()

读书人网 >C++

热点推荐