在不同于Windows的平台上,您可以轻松使用char *
字符串并将其视为UTF-8。
问题是在Windows上,您需要使用wchar *字符串(W)接受和发送消息。如果您将使用ANSI函数(A),则不支持Unicode。
因此,如果您想编写真正的可移植应用程序,则需要在Windows上将其编译为Unicode。
现在,为了保持代码清洁,我想看看处理字符串的推荐方法是什么,这种方法可以最大限度地减少代码中的丑陋。
您可能需要的字符串类型:std::string
,std::wstring
,std::tstring
,char *
,wchat_t *
,TCHAR*
,{{1} (ATL one)。
您可能遇到的问题:
CString
及其Unicode变体cout/cerr/cin
wcout,wcerr,wcin
,strcmp
和wcscmp
。 _tcscmp
宏填充代码。您认为哪种方法最好?(欢迎举例)
就个人而言,我会采用_T()
方法,但我希望看到如何对必要的转换做。
答案 0 :(得分:3)
我只建议您查看此库:http://cppcms.sourceforge.net/boost_locale/docs/
它可能有所帮助,它现在是一个提升候选人,但我相信它会成功。
答案 1 :(得分:1)
您可以保留所有字符串UTF-8编码,并在与WIn32 API交互之前将它们转换为UTF-16。查看UTF8-CPP库以获得一些易于使用的转换函数
答案 2 :(得分:1)
如果您编写可移植代码:
1st永远不要使用wchar_t
它也不是便携式的,并且它的编码在平台之间没有很好地定义(utf-16 windows / utf-32所有其他)。
永远不要使用TChar,使用纯std::string
编码为UTF-8。
在处理Brain Damaged Win32 API时,只需在调用之前将UTF-8字符串转换为UTF-16。
请参阅https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful以及Windows项目如何采用UTF-8作为主要编码。