在不同于Windows的平台上,您可以轻松使用char *
string,并将它们视为UTF-8。
问题是,在Windows上,您需要使用wchar *string(W)接受和发送消息。 如果您将使用ANSI函数(A),您将不支持Unicode。
所以如果你想编写真正的可移植的应用程序,你需要在Windows上将其编译为Unicode。
现在,为了保持代码清洁,我想看看处理string的推荐方法是什么,这是一种最小化代码中的丑陋的方法。
std::string
, std::wstring
, std::tstring
, char *
, wchat_t *
, TCHAR*
, CString
(ATL one)。
您可能遇到的问题:
cout/cerr/cin
及其Unicode变体wcout,wcerr,wcin
strcmp
, wcscmp
和_tcscmp
。 _T()
macros填充你的代码。 你认为最好的方法是什么? (欢迎举例)
就个人而言,我会去一个std::tstring
方法,但我想看看如何做到这一点,他们是必要的转换。
我只能建议你检查这个库: http : //cppcms.sourceforge.net/boost_locale/docs/
这可能会有帮助,现在是一个推动人选,但我相信它会成功。
如果你写可移植的代码:
第一,不要使用wchar_t
它也不便携,它的编码在平台之间没有很好的定义(utf-16 windows / utf-32所有其他)。
切勿使用TChar,使用普通的std::string
编码为UTF-8。
在处理脑损坏的Win32 API时,只需将UTF-8字符串转换为UTF-16就可以了。
关于Windows项目如何采用UTF-8作为主要编码,请参见https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful 。
您可以保留所有的字符串UTF-8编码,只需将其转换为UTF-16之前与WIn32 API交互。 看看UTF8-CPP库的一些易于使用的转换功能