用wchar_t处理 unicode 字符好吗?它不会引起任何问题吗?

Is handling unicode character with wchar_t good? Does it not cause any problems?

本文关键字:问题 任何 wchar 处理 unicode 字符      更新时间:2023-10-16

我一直在寻找一种处理波兰语单词的方法。我读过 utf8、16、32,但任何从charutf的转换都会给我不同的字母。

不过,wchar_t给出了正确的字母。

这样做可以吗?

例如,如果我只使用 ascii,仅仅是因为,性能如何?它是否会以任何方式影响应用程序?

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

  1. 存储

    如何存储构成文本字符串的字节。这会在char(单字节(值数组中吗?还是会以wchar_t(多字节(值的形式出现?

  2. 编码

    您的计算机(和您!(需要知道如何处理这些字节中的值。它们是什么意思?无论存储如何,它们都可以是ASCII,某些代码页,UTF-8,UTF-16,UTF-32,克林贡语,等等。

通常,出于历史原因,我们为单字节编码(例如ASCII(和UTF-8选择char,为UTF-16选择wchar_t(特别是在Windows上,它具有16位wchar_t,并且通常在整个API中假设这种组合 - 请注意,它错误地将其简单地称为"Unicode"(。

性能并没有真正发挥作用,尽管如果您选择一种并坚持使用它(并使用适合您正在使用的字符串库的存储机制(,您将节省时间和精力在不同编码之间进行转换。有时您的操作系统会帮助确定该选择,但我们无法告诉您它将是什么。

同样,你关于什么"有效"和"不起作用"的陈述非常模糊,很可能是错误的。

在不知道项目要求、运行在哪种计算机上以及使用什么技术的情况下,我们不能说什么是"好的"。不过,我要做一个很大的概括:在过去,你可能使用 Mazovia 编码,这是一种包含波兰字符的更改代码页;如今,您可能希望使可移植性和互换性尽可能简单(因为为什么不呢?!(,因此鼓励您在Windows上坚持使用UTF-16而不是wchar_t,在其他方面坚持使用UTF-8而不是char

(从C++20开始,我们还将有char8_t,一种专门设计用于表示它存储UTF-8编码数据的存储机制;但是,您还需要一段时间才能看到它被广泛使用,如果有的话。您可以在 cppreference 上阅读有关C++字符类型的更多信息.com关于"基本类型"的文章(

相关文章: