[英]Strange behavior of std::string with unicode
我有以下代碼:
#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 ' '
它將只讀取第一個字節,然后停止。 但它寫着Ƞ
。 怎么樣?
最可能的原因是所有內容都以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
^^^^
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.