7

在不同于 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方法,但我想看看如何在必要的地方进行转换。

4

3 回答 3

3

我只能建议你检查这个库:http
://cppcms.sourceforge.net/boost_locale/docs/ 它可能会有所帮助,它现在是一个提升候选者,但我相信它会成功。

于 2010-04-27T16:24:46.163 回答
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 作为主要编码。

于 2010-04-28T15:44:23.097 回答
1

您可以保留所有字符串 UTF-8 编码,并在与 WIn32 API 交互之前将它们转换为 UTF-16。查看UTF8-CPP库,了解一些易于使用的转换函数

于 2010-04-27T19:01:00.507 回答