微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

如果不使用这个,我会遇到什么问题?

枚举窗口时发生

如何在linux内核的memcpy函数添加一个钩子?

在没有MFC的情况下从C ++运行JavaScript函数

在同一个系统上有多个GCC的情况下使用哪个版本的libstdc ++。so

面对一个问题,当我做一个Windows服务的设置

如何在安装驱动程序之前在C ++中获取GPU信息

通过Windowspipe道写入进程STDIN

在Linux中等待WaitForSingleObject和WaitForMultipleObjects

如何在cout上使用isatty(),或者我可以假设cout ==文件描述符1?

使崩溃日志有意义(c ++,Linux env)

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

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

此外,只有在“宽”版本中才有几个较新的API。

最后,涉及文本的每个API调用都会稍微慢一点,因为“ A ”版本的API通常只是“ W ”API周围的简单包装,它将参数转换为UTF-16,所以,就“简单” W调用而言。

没有什么能阻止你在你的应用程序中使用窄字符的Unicode编码(=> UTF-8),但是Windows“ A ”API 不会说UTF-8 ,所以你必须转换成UTF-16并且调用W版本无论如何。

我相信原来问题的要点是“我应该用”#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 ++程序员受过教育,必须使用“widechars”来完成Unicode。 由于这个混乱,他们现在是关于什么是正确的事情文本最困惑的。

我衷心推荐这三个环节:

每个软件开发人员都应该了解Unicode

应该认为UTF-16有害吗?

UTF-8无处不在

恕我直言…

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐