跨平台编码问题

weiym 2012-10-21 09:48:47
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类型的。

不知道一般跨平台的程序是怎么解决这个问题的,希望有相关经验的朋友指教。
...全文
216 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunriseWang 2012-10-22
  • 打赏
  • 举报
回复
boost::local::covn::to_utf<char>()
赵4老师 2012-10-22
  • 打赏
  • 举报
回复
不统一是正常的、现实存在的;
统一是不正常的、太理想化的。
weiym 2012-10-22
  • 打赏
  • 举报
回复
看看有没有人清楚的
mujiok2003 2012-10-21
  • 打赏
  • 举报
回复

whar_t unicodestring[] = L"hello world";


应该在所有平台上都能工作。 不同编码的数据需要转换,如果需要跟其他非Unicode编码的进程交换数据。
mujiok2003 2012-10-21
  • 打赏
  • 举报
回复
大部分系统都支持 unicode-16吧。
赵4老师 2012-10-21
  • 打赏
  • 举报
回复
推荐使用ConvertZ软件
weiym 2012-10-21
  • 打赏
  • 举报
回复
好像都没说到点子上, 我的主要问题是跨平台程序怎么处理编码问题。
有人建议用Unicode,但是Windows上的Unicode是指Unicode16, 而Linux上默认的Unicode确是Unicode32,还是不统一。
qq120848369 2012-10-21
  • 打赏
  • 举报
回复
文件里的字符是什么编码取决于你终端输入的是什么, 比如secureCRT是gbk编码, 那么输入的就是gbk, secureCRT是utf-8编码,那么输入的就是utf-8。
Eleven 2012-10-21
  • 打赏
  • 举报
回复
都用Unicode编码~

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧