在内部使用 UTF-8 工作,然后仅在 Windows 中需要时转换为 UTF-16 是否有任何危险?

Car*_*arl 5 c++ windows cross-platform utf-8 utf-16

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

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

我特别询问的是针对多个操作系统进行开发 - 不使用 UTF-8 的 Windows 以及使用 UTF-8 等其他操作系统的操作系统。

小智 2

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

但是,请注意,如果您显示大量文本,每次转换的成本可能会变得非常昂贵。(请记住,您不仅需要进行转换,还可能需要分配和释放缓冲区来保存临时的转换后的字符串。)

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

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

  • 我还添加此链接作为评论,因为它包含很多相关信息:http://utf8everywhere.org/ (2认同)