C++ 使用wchar处理unicode字符是否良好?它不会引起任何问题吗?

C++ 使用wchar处理unicode字符是否良好?它不会引起任何问题吗?,c++,unicode,utf,C++,Unicode,Utf,我一直在寻找处理波兰语单词的方法。我读过关于utf8、16、32的文章,但是从char到utf的任何转换都会给我带来不同的字母 不过,wchar\u t给出了一个正确的字母 这样做可以吗 例如,如果我只使用ascii码,性能如何?它对应用程序有任何影响吗?您混淆了两件不同的事情: 存储 如何存储组成文本字符串的字节。这将是一个由char(单字节)值组成的数组吗?还是以wchar\u t(多字节)值的形式 编码 您的计算机(以及您!)需要知道如何处理这些字节中的值。它们是什么意思?不管存储是什么,

我一直在寻找处理波兰语单词的方法。我读过关于utf8、16、32的文章,但是从
char
utf
的任何转换都会给我带来不同的字母

不过,wchar\u t给出了一个正确的字母

这样做可以吗


例如,如果我只使用ascii码,性能如何?它对应用程序有任何影响吗?

您混淆了两件不同的事情:

  • 存储

    如何存储组成文本字符串的字节。这将是一个由
    char
    (单字节)值组成的数组吗?还是以
    wchar\u t
    (多字节)值的形式

  • 编码

    您的计算机(以及您!)需要知道如何处理这些字节中的值。它们是什么意思?不管存储是什么,它们可以是ASCII、一些、UTF-8、UTF-16、UTF-32、克林贡或任何形式

  • 通常,出于历史原因,我们为单字节编码(例如ASCII)和UTF-8选择
    char
    ,为UTF-16选择
    wchar\u t
    (特别是在Windows上,它有16位
    wchar\u t
    s,并且通常在其整个API中都假设这种组合-注意,它不准确地将其称为“Unicode”)

    性能并没有真正体现出来,不过如果您选择一种编码并坚持使用它(并使用适合您正在使用的字符串库的存储机制),则可以节省在不同编码之间转换的时间和精力。有时候,你的操作系统会帮助你做出选择,但我们无法告诉你会是什么

    同样,你关于什么“起作用”和“不起作用”的陈述非常模糊,而且很可能是错误的

    我们不能说什么是“ok”,而不知道你的项目的要求,它将运行在什么类型的计算机上,使用什么技术。不过,我会做出一个巨大的概括:在过去,你可能会使用一个经过修改的代码页,其中包含波兰字符;如今,您可能希望尽可能地简化可移植性和交换(因为为什么不呢?!),因此我们鼓励您在Windows上使用UTF-16 over
    wchar\t
    ,否则使用UTF-8 over
    char


    (在C++20中,我们还将有
    char8\u t
    ,这是一种专门设计用来表示它存储UTF-8编码的数据的存储机制;然而,如果可以的话,您还需要一段时间才能看到它被广泛使用。您可以在上阅读更多关于C++字符类型的内容)

    如何定义“工作”和“不工作”之间的关系?在哪个上下文中,在哪个编译器中,在什么代码中它“工作”或“不工作”?@CruzJean谁说
    wchar\u t
    是16位?@melpomene可能不是。当然,但说“wchar\u t在支持Unicode的系统上是32位”是错误的。@n0rd它字面上是这样说的“一个显著的例外是Windows,其中wchar_______________________________“紧接着,itASCII编码几乎在任何地方都没有使用。ASCII是7位的。算了吧。实际使用的内容取决于系统和所选区域设置。@n0rd这是真的;我只是扩展了一下答案来讨论代码页,但我不想在这个问题上说太多细节。但是,我听说utf-8可以表示4个字节,所以它是32位(实际上我们可以使用21位),所以它比utf-16更大,正如上面所讨论的,或者在不同的操作系统上与windows相同。我的观点是,为什么要使用utf-16/32而不是8?@BrodaJarek3是因为历史的原因。这篇博文介绍了在微软Windows上发生的一些事情:@BrodaJarek3它最多有32位,分布在存储这些信息所需的所有字节中。至于“为什么要使用utf-16/32而不是8”,这是一个很好的问题,大多数人会告诉你“不要”:)除非Windows API在整个过程中都使用utf-16,否则如果你使用utf-8,你会不断地来回转换,所以他们已经为你做出了决定。