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