0

我正在尝试标记由 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;
}

提前致谢。

4

1 回答 1

3

使用 UTF-8 编码的字符可能会占用一个以上的字节(而且经常如此)。用于编码单个代码点的字节数可以从 1 字节到 6 字节不等(或RFC 3629下的 4 字节)。在 π 的情况下,UTF-8 编码(二进制)是:

11001111 10000000

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

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

于 2013-02-24T11:20:57.390 回答