Windows 如何在C/C++;以跨平台友好的方式?

Windows 如何在C/C++;以跨平台友好的方式?,windows,string,unicode,cross-platform,tchar,Windows,String,Unicode,Cross Platform,Tchar,在不同于Windows的平台上,您可以轻松地使用char*字符串,并将其视为UTF-8 问题是,在Windows上,您需要使用wchar*字符串(W)接受和发送消息。如果使用ANSI函数(A),则不支持Unicode 所以,如果您想编写真正可移植的应用程序,您需要在Windows上将其编译为Unicode 现在,为了保持代码干净,我想看看处理字符串的推荐方法是什么,一种最小化代码中丑陋的方法 您可能需要的字符串类型:std::string,std::wstring,std::tstring,ch

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

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

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

现在,为了保持代码干净,我想看看处理字符串的推荐方法是什么,一种最小化代码中丑陋的方法

您可能需要的字符串类型:
std::string
std::wstring
std::tstring
char*
wchat*
TCHAR*
CString
(ATL one)

您可能遇到的问题:

  • cout/cerr/cin
    及其Unicode变体
    wcout、wcerr、wcin
  • 所有重命名的宽字符串函数及其TCHAR宏,如
    strcmp
    wcscmp
    \u tcscmp
  • 代码中的常量字符串,使用TCHAR,您必须使用
    \u T()
    宏填充代码
您认为哪种方法最好?(欢迎举例)


就我个人而言,我会选择一种
std::tstring
方法,但我想看看在必要时如何进行转换。

我只能建议您查看此库:

它可能会有所帮助,但我相信它会成功。

您可以对所有字符串进行UTF-8编码,并在与WIn32 API交互之前将其转换为UTF-16。如果您正在编写可移植代码,请查看库中的一些易于使用的转换函数:

第一,切勿使用
wchar\u t
它既不可移植,也不能在平台之间很好地定义其编码(utf-16 windows/utf-32所有其他)

不要使用TChar,使用普通的
std::string
编码为UTF-8

当处理大脑受损的Win32 API时,只需在调用它之前将UTF-8字符串转换为UTF-16即可


另请参阅Windows project如何采用UTF-8作为主编码。

较新的文档放在它的旁边,可以正常工作。我只是等待boost build中的一些修复,以使bjam/boost build能够正确地找到ICU库并构建boost-locale。那些做不到的,boost.in visual studio,当我做
std::string msg=”महसुस";,我无法查看。所有内容都被问号所取代。有什么想法吗?答案中引用的SO帖子现在是一个死链接。似乎这是一篇重要的帖子……使用UTF-16的windows没有任何大脑损伤。windows开始使用windows NT支持Unicode(1993年发布).UTF-8只是在1992年9月作为一个概念发明的,因此Windows无法采用它。事实上,Windows是Unicode的一个高度进步的早期采用者-结果可能太早了。解释了这一切。