为什么 8 位字符串文字可以包含多字节字符,而 char 向量不能?

Why can an 8-bit string literal contain multibyte characters while a vector of char cannot?

我想弄清楚为什么 8 位 char 数据类型可以包含所有这些奇怪的字符,因为它们不是前 256 个字符的一部分 table。

#include <iostream>

int main()
{
    char chars[] = "    必   西 ♠ ♬   ♭   ♮   ♯";
    std::cout << "sizeof(char): " << sizeof(char) << " byte" << std::endl;
    std::cout << chars << std::endl;
    return 0;
}

8 位 char 最多只能容纳 256 个值。但是 Unicode 有几十万个字符。它们显然不能放入单个 char。因此,它们必须 编码 以适合 multiple chars.

您的 editor/compiler 可能以 UTF-8 编码存储您的示例字符串。 Non-ASCII个UTF-8字符占1个char.

在您的示例中,在 UTF-8 中,sizeof(chars) 的大小为 55+1=56 chars(空终止符为 +1),即使您只看到 29 "字符”(如果算上空格),其中:

= 0x20 (18x)
</code> = <code>0xF0 0x9F 0x98 0x8E
</code> = <code>0xF0 0x9F 0xA5 0xB8
</code> = <code>0xF0 0x9F 0xA4 0xA9
</code> = <code>0xF0 0x9F 0xA5 0xB3
= 0xE5 0xBF 0x85
西 = 0xE8 0xA5 0xBF
= 0xE2 0x99 0xA0
= 0xE2 0x99 0xAC
= 0xE2 0x99 0xAD
= 0xE2 0x99 0xAE
= 0xE2 0x99 0xAF