我的C ++项目目前大约有16K行代码,我承认首先完全没有考虑过unicode支持。
我所做的只是std::string
的自定义typedef String
并跳转到编码。
我自己从未在我编写的程序中使用过unicode。
现在将项目切换到unicode有多难?它甚至是个好主意吗?
我可以在没有任何重大问题的情况下切换到std::wchar
吗?
答案 0 :(得分:7)
使应用程序能够识别unicode的最重要的部分可能是跟踪字符串的编码,并确保您的公共接口已经明确指定,并且易于使用您希望使用的编码。
切换到更宽的字符(在c ++ wchar_t
中)不一定是正确的解决方案。事实上,我认为这通常不是最简单的解决方案。某些应用程序可以通过指定所有字符串和接口使用UTF-8而根本不需要更改来逃脱。 std::string
可以很好地用于UTF-8编码的字符串。
但是,如果您需要解释字符串或非UTF-8接口的接口中的字符,那么您将需要投入更多的工作但不了解您的应用程序,因此无法推荐单一的最佳方法。
答案 1 :(得分:2)
使用std::wstring
时存在一些问题。如果您的应用程序将以Unicode格式存储文本,并且它将在不同平台上运行,则可能会遇到麻烦。 std::wstring
依赖于wchar_t
,它取决于编译器。在Microsoft Visual C ++中,此类型为16位宽,因此仅支持UTF-16编码。 GNU C ++编译器将此类型指定为32位宽,因此仅支持UTF-32编码。如果然后将文本存储在一个系统(例如Windows / VC ++)的文件中,然后从另一个系统(Linux / GCC)读取该文件,则必须为此做好准备(在这种情况下,从UTF-16转换为UTF-32)。
答案 2 :(得分:1)
我可以在没有任何重大问题的情况下切换到[
std::wchar_t
]吗?
不,这不是那么简单。
wchar_t
字符串的编码与平台有关。 Windows使用UTF-16。 Linux通常使用UTF-32。 (C ++ 0x将通过引入单独的char16_t
和char32_t
类型来缓解这种差异。)_wfopen
等。wchar_t
?char
搜索和替换char
,因为C ++会混淆“character”和“byte”,您必须确定哪些wchar_t
是字符和其中char
是字节。