跨平台C++软件开发中,由于不同操作系统对Unicode的支持差异,而导致的一些问题及解决方案。 收藏
1. 问题的提出。
1. 问题的提出。
各种各样的编码永远是软件开发者最为头痛的问题之一,Unicode为统一编码带来了希望。可是,就算是Unicode也不是百分百的完美,它只是完成了对各种语言编码的制定,而在具体的操作系统支持上,又分为UTF8,UTF16和UTF32好几个版本。比如,Windows系统支持的Unicode是UTF16,也就是每2个字节表示一个字符(还有一种称为代理的情况,容后讨论)。而Linux下默认支持的却是UTF32的Unicode标准,每4个字节才表示一个字符。
2. 实例说明
想象一下,假设您在Windows 系统下开发了一个软件,将一些文本数据用Unicode(UTF16)编码保存到一个文件,现在由于业务需要,您想将这个程序在Linux平台跑起来,会发生什么情况呢?
一般来说,您的代码在处理字符串资源时,会使用C/C++标准库的wchar_t数组或者std::wstring来保存字符串,使用wstrcpy,wstrlen或者std::string类提供的成员函数处理字符串,然后使用wfprintf或者std::wfstream进行字符串的读写。这部分代码好像没有问题,标准的C/C++ 函数,在整个软件移植时都不用修改。是的,代码词法和语法确实都没有问题,编译也能够通过。可是,程序运行的结果呢?根据上面的讨论,wchar_t在Windows平台下,,每个字符2个字节;而在linux平台下