c++ - 在 UTF-8 内部工作然后仅在 Windows 需要时才转换为 UTF-16 是否有任何危险?

标签 c++ windows utf-8 cross-platform utf-16

Visual Studio 试图坚持使用 tchars,当使用 UNICODE 选项编译时,它基本上最终会使用 Windows 和其他 API 的广泛版本。

然后在应用程序内部使用 UTF-8 是否有任何危险(这使得 C++ STL 的使用更容易并且还可以实现更可读的跨平台代码)然后仅在需要使用任何时转换为 UTF-16操作系统 API?

我特别询问有关为多个操作系统开发的问题 - Windows 不使用 UTF-8,而其他操作系统(如 Mac)则使用。

最佳答案

正如其他人所说,内部使用 UTF-8 没有危险,然后在需要调用 Windows 函数时转换。

但是请注意,如果您要显示大量文本,那么每次转换的成本可能会高得令人望而却步。 (请记住,您不仅需要进行转换,还可能需要分配和释放缓冲区来保存临时的、转换后的字符串。)

我还应该指出,STL 内置了宽字符支持,因此确实没有理由这样做。 (std::wstring 等)

此外,只使用 UTF-8 对英语很好,但如果您计划支持东欧、阿拉伯或亚洲字符集,您对文本的存储要求可能会比 UTF-16 大(由于到需要存储三个或四个代码点的更多字符)。同样,如果您要处理大量文本,这可能只会是一个问题,但这是需要考虑的事情 - 如果您要随时通过网络连接传输此文本,则加倍考虑。

关于c++ - 在 UTF-8 内部工作然后仅在 Windows 需要时才转换为 UTF-16 是否有任何危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9623898/

相关文章:

java - 在 Windows 7 上运行 Bash(.sh)

c++ - 优化 C++ 模板执行

c++ - 如果你编写了一个 C++/OO 跨平台框架,发现它因为没有时间而在你的磁盘上放置了太多,你会怎么做?

c++ 将数据添加到包含 std::tuple 的 std::vector

c++ - 如何连接两个 Boost Hana map ?

c++ - 视频窗口无响应,窗口模式,DirectShow

mysql - 将C代码的输出重定向为MySQL服务器的输入

C++ UTF-16 到 char 转换 (Linux/Ubuntu)

php - 从一个数据库读取数据并使用 PHP 插入另一个数据库时出现编码错误

mysql - 哪个 UTF8 - phpMyAdmin 可以正确显示中文、俄文、阿拉伯文?