如何以跨平台友好的方式处理C/C++中的Unicode字符串?

sor*_*rin 7 windows string unicode cross-platform tchar

在不同于Windows的平台上,您可以轻松使用char *字符串并将其视为UTF-8.

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

因此,如果您想编写真正的可移植应用程序,则需要在Windows上将其编译为Unicode.

现在,为了保持代码清洁,我想看看处理字符串的推荐方法是什么,这种方法可以最大限度地减少代码中的丑陋.

字符串的类型可能需要:std::string,std::wstring,std::tstring,char *,wchat_t *,TCHAR*,CString(ATL一个).

您可能遇到的问题:

  • cout/cerr/cin 和他们的Unicode变种 wcout,wcerr,wcin
  • 所有重命名的宽字符串函数和它们的TCHAR宏 - 比如strcmp,wcscmp_tcscmp.
  • 代码中的常量字符串,使用TCHAR,您必须使用_T()宏填充代码.

您认为哪种方法最好?(欢迎举例)

就个人而言,我会采取一种std::tstring方法,但我想看看如何对他们必要的转换做些什么.

the*_*row 3

我只能建议您查看这个库:http://cppcms.sourceforge.net/boost_locale/docs/
它可能会有所帮助,它目前是一个增强候选者,但我相信它会成功。