我有以下这段代码:
#include <iostream>
std::string eps("ε");
int main()
{
std::cout << eps << '\n';
return 0;
}
一些代码在Ubuntu上使用g++和clang编译,甚至可以正确地打印出字符“ε”。我有几乎相同的代码片段,它可以使用cin愉快地读取“ε”并将其存储到std :: string中。顺便说一句,eps.size()为2。
我的问题是 - 这是如何工作的?我们如何将unicode字符插入std :: string中?我猜操作系统处理了所有与unicode相关的工作,但我不确定。
编辑
就输出而言,我明白了,终端负责显示正确的字符(在这种情况下是ε)。
但是对于输入:cin读取符号到“ ”或任何其他空格字符(我按字节理解)。因此,如果我取Ƞ,其中第二个字节为32 ' ',它只会读取第一个字节,然后停止。但它确实读取了Ƞ。怎么做到的呢?
wstring
无关,顺便说一句,它也不知道如何处理Unicode的所有复杂性。 - PraetorianȠ
不会被存储为十六进制字节02 20。相反,它们被编码为一种特殊的UTF-8格式,对于Ƞ
来说是C8 A0。 - Lithis