我有以下代码:
#include <iostream>
std::string eps("ε");
int main()
{
std::cout << eps << '\n';
return 0;
}
不知何故,它在Ubuntu上用g ++和clang编译,甚至打印出正确的字符ε
。
此外,我还有几段相同的代码,可以快速地将ε
与cin
一起读入std::string
。
顺便说一句,eps.size()
是2。
我的问题是 - 它是如何运作的?我们如何在std::string
中插入unicode字符?
我的猜测是操作系统使用unicode处理所有这些工作,但我不确定。
修改
与输出一样,我知道终端负责向我展示正确的角色(在这种情况下为ε)。
但是输入:cin读取符号到' '
或任何其他空格字符(据我逐字逐句了解)。所以,如果我取Ƞ
,哪个第二个字节是32 ' '
,它将只读取第一个字节,然后停止。但它会显示Ƞ
。怎么样?
答案 0 :(得分:5)
最可能的原因是所有内容都在UTF-8中编码,就像在我的系统上一样:
$ xxd test.cpp
...
0000020: 2065 7073 2822 ceb5 2229 3b0a 0a69 6e74 eps("..");..int
^^^^ ε in UTF-8 ^^ TWO bytes!
...
$ g++ -o test.out test.cpp
$ ./test.out
ε
$ ./test.out | xxd
0000000: ceb5 0a
^^^^