在Windows上不使用Unicode有什么缺点?
通过Unicode,我的意思是WCHAR和广泛的API函数。 (CreateWindowW,MessageBoxW等)
如果不使用这个,我会遇到什么问题?
枚举窗口时发生
在没有MFC的情况下从C ++运行JavaScript函数
在同一个系统上有多个GCC的情况下使用哪个版本的libstdc ++。so
如何在安装驱动程序之前在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] 举报,一经查实,本站将立刻删除。