c++ - 支持和反对在跨平台库中专门支持 std::wstring 的论点

标签 c++ unicode cross-platform wstring

我目前正在开发一个跨平台的 C++ 库,我打算将其识别为 Unicode。我目前通过 typedef 和宏为 std::string 或 std::wstring 提供编译时支持。这种方法的缺点是它迫使您使用 L("string") 之类的宏,并大量使用基于字符类型的模板。

支持和反对仅支持 std::wstring 的论点是什么?

仅使用 std::wstring 是否会阻碍首选 UTF-8 编码的 GNU/Linux 用户群?

最佳答案

很多人希望使用 UTF-8 (std::string) 而不是 UCS-2 (std::wstring) 的 unicode。 UTF-8 是很多 Linux 发行版和数据库的标准编码——所以不支持它会是一个巨大的劣势。在 Linux 上,每次使用字符串作为参数调用库中的函数都需要用户将( native )UTF-8 字符串转换为 std::wstring。

在 gcc/linux 上,std::wstring 的每个字符有 4 个字节,而在 Windows 上有 2 个字节。这会在读取或写入文件(以及从/向不同平台复制它们)时导致奇怪的效果。我宁愿为跨平台项目推荐 UTF-8/std::string。

关于c++ - 支持和反对在跨平台库中专门支持 std::wstring 的论点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3651390/

相关文章:

Python header unicode 到 dict

c++ - 如何将 Qt 应用程序部署到其他系统?

c++ - 如何在gcc 8上使用std::filesystem?

java - 从字符串中删除字符 '\u202A' 8234

c++ - 友元函数应该写在哪里?

c++ - 如何正确打印 __FILE__ 扩展到的字符串?

c++ - 我已经创建了一个 Sprite 并使用相同的引用将它们添加到场景中,现在,我如何在不使用标签的情况下删除它们?

JavaScript 用户代理网格?

c++ - 从列表/vector 创建嵌套 for 循环的最佳方法是什么?

c++ - 析构函数中的动态转换