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

时间:2013-02-24 11:15:45

标签: c++ utf-8

我正在尝试将包含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;
}

提前致谢。

1 个答案:

答案 0 :(得分:3)

使用UTF-8编码的字符可能占用多个字节(通常也会这样)。用于编码单个代码点的字节数可以从1个字节到6个字节(或RFC 3629下的4个字节)不等。在π的情况下,二进制的UTF-8编码是:

11001111 10000000

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

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