C++ 在Windows中不使用Unicode的缺点是什么?

C++ 在Windows中不使用Unicode的缺点是什么?,c++,c,windows,winapi,unicode,C++,C,Windows,Winapi,Unicode,在Windows上不使用Unicode的缺点是什么 Unicode是指WCHAR和广泛的API函数。(CreateWindowW、MessageBoxW等) 不使用此选项会遇到什么问题?在处理系统APIs1时,您的代码将无法正确处理当前选定代码页之外的字符 典型的问题包括不支持的字符被翻译成问号,无法处理带有特殊字符的文本,尤其是名称/路径中带有“奇怪字符”的文件 此外,一些较新的API仅在“广泛”版本中提供 最后,每个涉及文本的API调用都会稍微慢一些,因为“A”版本的API通常只是围绕“W”

在Windows上不使用Unicode的缺点是什么

Unicode是指
WCHAR
和广泛的API函数。(CreateWindowW、MessageBoxW等)


不使用此选项会遇到什么问题?

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

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

此外,一些较新的API仅在“广泛”版本中提供

最后,每个涉及文本的API调用都会稍微慢一些,因为“
A
”版本的API通常只是围绕“
W
”API的薄型包装,可以动态地将参数转换为UTF-16,因此,对于“普通的”
W
调用,您会有一些开销


  • 没有什么能阻止您在应用程序中使用窄字符Unicode编码(=>UTF-8),但是Windows“
    a
    ”API,因此您必须转换为UTF-16并调用
    W
    版本

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

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

    此外,一些较新的API仅在“广泛”版本中提供

    最后,每个涉及文本的API调用都会稍微慢一些,因为“
    A
    ”版本的API通常只是围绕“
    W
    ”API的薄型包装,可以动态地将参数转换为UTF-16,因此,对于“普通的”
    W
    调用,您会有一些开销


  • 没有什么能阻止您在应用程序中使用窄字符Unicode编码(=>UTF-8),但是Windows“
    a
    ”API,因此您必须转换为UTF-16并调用
    W
    版本

  • 我相信最初问题的要点是“我应该用”#define(u UNICODE#编译我所有的Windows应用程序吗?#如果我不这样做的话,会有什么负面影响

    我最初的回答是:“是的,你应该。我们已经移动了8位ASCII,对于任何现代Windows代码,“_UNICODE”都是合理的默认值。”

    对于Windows,我仍然认为这是一个相当好的建议。但我删除了我原来的回复。因为直到我重新阅读自己的链接,我才意识到“UTF-16是一个非常令人悲伤的事态”(正如意大利马特奥公司雄辩地说的那样)

    例如:

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

    我衷心推荐以下三个环节:


    我怎么…

    我相信最初问题的要点是“我应该用”#define(UNICODE#定义)编译我所有的Windows应用程序吗?如果我不这样做,有什么坏处

    我最初的回答是:“是的,你应该这样做。我们已经移动了8位ASCII,而对于任何现代Windows代码,'\u UNICODE'是一个合理的默认值。”

    对于Windows,我仍然认为这是一个相当好的建议。但是我已经删除了我原来的回复。因为直到我重新阅读我自己的链接,我才意识到“UTF-16是一个非常令人悲伤的事态”(正如意大利马特奥雄辩地指出的那样)

    例如:

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

    我衷心推荐以下三个环节:


    U/P.> Windows调用的Unicode更准确地称为UTF 16,这是Unicode的几种表示形式之一,它也是一个精确的小Endito UTF 16,它提供了深入讨论Windows上C++程序的Unicode是正确的和错误的,Windows调用的Unicode更准确地称为“UTF 16”。Unicode的几种表示形式之一,它也是小的Endito UTF 16,它提供了关于C++程序中Windows上Unicode的正确和错误的深入讨论。虽然它们的编码问题都是真的,但我认为把它描述为“错误”是不公平的。当unicode实际上是所有16位简单字符时,他们采用了这种方法。尝试做正确的事情的痛苦,以及被不断变化的标准所取代……虽然他们的编码问题都是真的,但我认为将其描述为“错误”是不公平的,因为在unicode实际上都是16位简单字符的时候,他们采用了这种编码。尝试做正确的事情,被不断变化的标准超越的痛苦。。。