为什么我在尝试输出UTF-8字符时会得到三个不同的数字
Why do I get three different numbers when i try to output a UTF-8 character?
我正在尝试将由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字符进行任何处理,则需要解释字节的含义。你到底需要做什么取决于你如何对角色进行分类。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 在 2D 向量中使用第三个 [ ] 有什么意义?
- 如何知道n!是否可以表示为三个连续数字的乘法?
- 使用三个数字比较器进行排序
- 有没有更简单的方法可以从用户那里获取三个数字并按升序打印它们?
- 数组中最大的三个数字
- 跳过每三个数字
- 三个数字之间的 C++ 相加两个更高的数字,没有循环和数组
- 如何使用不同的功能计算三个数字的总和,平均值和产物
- 创建一个程序,要求用户输入两个数字,并有三个可能的答案.代码未编译.数字(作为int)
- 为什么linear_congruenty_engine :: seed(sseq)丢弃了由种子序列生成的三个数字
- 根据列中的第三个数字对向量进行排序
- 三个数字彩票猜谜游戏C++
- 从一组数字中找出最接近的三个数字值
- 需要帮助获取数组中最小的三个数字
- 输入三个数字,并在c++中确定最高和最低的数字
- 三个不同的数字
- 为什么我在尝试输出UTF-8字符时会得到三个不同的数字
- 至少三个数字