簡體   English   中英

使用unicode的std :: string的奇怪行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM