gpt4 book ai didi

c++ - 库的字符串编码应该符合 Unicode 还是灵活的?

转载 作者:行者123 更新时间:2023-11-28 06:59:29 27 4
gpt4 key购买 nike

我用 C++ 创建了一个库,它公开了 C 风格的接口(interface) API。一些参数是字符串,因此它们将是 char *。现在我知道它们应该都是 Unicode,但因为它是一个库,所以我不认为我想强制用户决定是否使用。理想情况下,我认为最好使用 TCHAR,这样我就可以为 unicode 代码和 ASCII 用户构建它。比我读this它总体上反对这个想法。

作为 API 的示例,字符串是文件名或错误消息,如下所示。

void LoadSomeFile(char * fileName );
const char * GetErrorMsg();

我正在使用 C++ 和 STL。有这场争论 std::string vs std::wstring以及。就我个人而言,我非常喜欢 MFC 的 CString 类,它很好地处理了所有这些,但这意味着我必须仅将 MFC 用于它的字符串类。

现在我认为 TCHAR 可能是对我来说最好的解决方案,但我必须使用 CString(内部)才能工作吗?我可以将它与 STL 字符串一起使用吗?据我所知,它要么是 string 要么是 wstring 。

最佳答案

TCHAR 类型是一个不幸的设计选择,谢天谢地,它已经被我们抛弃了。谢天谢地,再也没有人需要使用 TCHAR 了。我们也已经做出了 Unicode 的选择:Unicode 是 future 唯一明智的选择。

问题是,您的图书馆是否仅限 Windows?还是便携?

  1. 如果您的库是可移植的,那么典型的选择是使用 UTF-8 编码字符串的 char *std::string。有关详细信息,请参阅 UTF-8 Everywhere .总结就是 wchar_t 在 Windows 上是 UTF-16,但在其他地方是 UTF-32,这使得它对跨平台编程几乎毫无用处。

  2. 如果您的库仅在 Win32 上运行,那么您可以随意使用 wchar_t。在 Windows 上,wchar_t 是 UTF-16。

不要同时使用两者,这会使您的代码和 API 臃肿且难以阅读。 TCHAR 是一种支持 Win32 API 并迁移到 Unicode 的 hack。

关于c++ - 库的字符串编码应该符合 Unicode 还是灵活的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22697337/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com