1

在 Windows 上不使用 Unicode 有什么缺点?

我的意思是 UnicodeWCHAR和广泛的 API 函数。(CreateWindowW、MessageBoxW 等)

不使用它会遇到什么问题?

4

2 回答 2

6

在处理系统 API 1时,您的代码将无法正确处理当前所选代码页之外的字符。

典型的问题包括不支持的字符被转换为问号,无法处理带有特殊字符的文本,特别是名称/路径中带有“奇怪字符”的文件。

此外,一些较新的 API 仅存在于“宽”版本中。

最后,每个涉及文本的 API 调用都会稍微慢一些,因为AAPI 的“”版本通常只是围绕“ W”API 的薄包装器,它可以即时将参数转换为 UTF-16 - 所以,你有一些开销一个“普通”的W电话。


  1. 没有什么能阻止您在应用程序中使用窄字符 Unicode 编码 (=>UTF-8),但 Windows " A" API不支持 UTF-8,因此您必须转换为 UTF-16 并调用W反正版本。
于 2013-01-03T02:32:06.350 回答
3

我相信最初问题的要点是“我应该用“#define _UNICODE”编译我所有的 Windows 应用程序吗?如果我不这样做有什么不好?

我最初的回答是“是的,你应该这样做。我们已经移动了 8 位 ASCII,并且 '_UNICODE' 是任何现代 Windows 代码的合理默认值。”

对于 Windows,我仍然认为这是相当不错的建议。但是我已经删除了我原来的回复。因为直到我重新阅读自己的链接时我才意识到“UTF-16 是一种相当可悲的事态”(正如 Matteo Italia 雄辩地指​​出的那样)。

例如:

http://utf8everywhere.org/

Microsoft ... 错误地将“Unicode”和“widechar”用作“UCS-2”和“UTF-16”的同义词。此外,由于 UTF-8 不能设置为窄字符串 WinAPI 的编码,因此必须使用 _UNICODE 而不是 _MBCS 编译她的代码。Windows C++ 程序员受过教育,Unicode 必须使用“widechars”来完成。由于这种混乱,他们现在是最困惑的人之一,关于什么是对文本做正确的事情。

我衷心推荐这三个链接:

恕我直言...

于 2013-01-03T07:51:13.920 回答