如何在跨平台友好的方式处理在C / C + +的Unicodestring?

在不同于Windows的平台上,您可以轻松使用char *string,并将它们视为UTF-8。

问题是,在Windows上,您需要使用wchar *string(W)接受和发送消息。 如果您将使用ANSI函数(A),您将不支持Unicode。

所以如果你想编写真正的可移植的应用程序,你需要在Windows上将其编译为Unicode。

现在,为了保持代码清洁,我想看看处理string的推荐方法是什么,这是一种最小化代码中的丑陋的方法。

std::stringstd::wstringstd::tstringchar *wchat_t *TCHAR*CString (ATL one)。

您可能遇到的问题:

  • cout/cerr/cin及其Unicode变体wcout,wcerr,wcin
  • 所有重命名的宽string函数和它们的TCHARmacros – 像strcmpwcscmp_tcscmp
  • 代码中的常量string,用TCHAR你将不得不用_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库的一些易于使用的转换功能