在 Windows 上不使用 Unicode 有什么缺点?
我的意思是 UnicodeWCHAR
和广泛的 API 函数。(CreateWindowW、MessageBoxW 等)
不使用它会遇到什么问题?
在处理系统 API 1时,您的代码将无法正确处理当前所选代码页之外的字符。
典型的问题包括不支持的字符被转换为问号,无法处理带有特殊字符的文本,特别是名称/路径中带有“奇怪字符”的文件。
此外,一些较新的 API 仅存在于“宽”版本中。
最后,每个涉及文本的 API 调用都会稍微慢一些,因为A
API 的“”版本通常只是围绕“ W
”API 的薄包装器,它可以即时将参数转换为 UTF-16 - 所以,你有一些开销一个“普通”的W
电话。
A
" API不支持 UTF-8,因此您必须转换为 UTF-16 并调用W
反正版本。我相信最初问题的要点是“我应该用“#define _UNICODE”编译我所有的 Windows 应用程序吗?如果我不这样做有什么不好?
我最初的回答是“是的,你应该这样做。我们已经移动了 8 位 ASCII,并且 '_UNICODE' 是任何现代 Windows 代码的合理默认值。”
对于 Windows,我仍然认为这是相当不错的建议。但是我已经删除了我原来的回复。因为直到我重新阅读自己的链接时我才意识到“UTF-16 是一种相当可悲的事态”(正如 Matteo Italia 雄辩地指出的那样)。
例如:
Microsoft ... 错误地将“Unicode”和“widechar”用作“UCS-2”和“UTF-16”的同义词。此外,由于 UTF-8 不能设置为窄字符串 WinAPI 的编码,因此必须使用 _UNICODE 而不是 _MBCS 编译她的代码。Windows C++ 程序员受过教育,Unicode 必须使用“widechars”来完成。由于这种混乱,他们现在是最困惑的人之一,关于什么是对文本做正确的事情。
我衷心推荐这三个链接:
恕我直言...