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

时间:2013-01-03 02:27:39

标签: c++ c windows winapi unicode

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

通过Unicode,我的意思是WCHAR和广泛的API函数。 (CreateWindowW,MessageBoxW等)

不使用它可以遇到什么问题?

2 个答案:

答案 0 :(得分:6)

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

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

此外,几个较新的API仅出现在“宽”版本中。

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


  1. 您的应用程序内部使用窄字符Unicode编码(=> UTF-8),但Windows“A”API don't speak UTF-8没有任何阻止您工作,因此您必须转换无论如何,转到UTF-16并调用W版本。

答案 1 :(得分:3)

我认为原始问题的要点是“我应该使用”#define _UNICODE“编译我的所有Windows应用程序,如果不这样做,那么它的缺点是什么?

我原来的答复是“是的,你应该。我们已经移动了8位ASCII,'_UNICODE'是任何现代Windows代码的合理默认值。”

对于Windows,我仍然认为这是一个相当不错的建议。但是我删除了原来的回复。因为我没有意识到,直到我重新阅读我自己的链接“UTF-16是一个非常悲惨的事态”(正如Matteo Italia雄辩地说的那样)。

例如:

  

http://utf8everywhere.org/

     

微软错误地使用'Unicode'和'widechar'作为   “UCS-2”和“UTF-16”的同义词此外,由于UTF-8不能   设置为窄字符串WinAPI的编码,必须编译她   使用_UNICODE而不是_MBCS的代码。 Windows C ++程序员是   知道Unicode必须用'widechars'来完成。后果   这个混乱,他们现在是关于什么是最混乱的   关于文本的正确做法。

我衷心推荐这三个链接:

... IMHO