为什么我在尝试输出UTF-8字符时会得到三个不同的数字

Why do I get three different numbers when i try to output a UTF-8 character?

本文关键字:三个 数字 输出 UTF-8 字符 为什么      更新时间:2023-10-16

我正在尝试将由UTF-8字符组成的输入标记化。当一些人尝试学习utf8时,我得到了一个我无法理解的输出。当我输入字符π(pi)时,我得到三个不同的数字207 128 10。我如何使用它们来控制它属于哪个类别?

ostringstream oss;
oss << cin.rdbuf();
string input = oss.str();
for(int i=0; i<input.size(); i++)
{
    unsigned char code_unit = input[i];
    cout << (int)code_unit << endl;
}

提前谢谢。

使用UTF-8编码的字符可能占用多个字节(而且经常占用)。用于编码单个码点的字节数可以从1个字节到6个字节不等(或者根据RFC 3629为4个)。在π的情况下,UTF-8编码(二进制)为:

11001111 10000000

也就是说,它是两个字节。您正在单独读取这些字节。第一个字节有十进制值207,第二个字节有十进位值128(如果您将其解释为无符号整数)。您正在读取的下一个字节的十进制值为10,是您在输入时给出的换行符。

如果要对这些UTF-8字符进行任何处理,则需要解释字节的含义。你到底需要做什么取决于你如何对角色进行分类。