標籤:

C++11 裡面的 u8 字元串字面值有什麼用?

對字符集有一定的基本理解,但是對於 C++11 里的這種 u8 字元串字面值的真正含義感到迷惑。查閱了 C++ 官方文檔以及亂搜了半天,依舊沒有弄清。

比如如下兩個:

char * first ="abc我愛你";

char * second=u8"abc我愛你";

這兩種寫法到底有啥區別?

個人在 Win 10 和 Linux 下分別寫了個小程序查看地址 first 和 second 後幾個位元組里的內容都是完全一樣的,那麼這個 u8 到底幹啥的?


GCC/Clang 控制字元編碼有兩個開關,叫 -finput-charset 和 -fexec-charset,分別控制源代碼讀入編譯器時的源文件的編碼,以及編譯器生成目標文件時普通字面量的 (const) char[] 類型數組的編碼。

VC 編輯器(以 2015 Update 2 以後版本為例)也有對應的兩個開關,叫 /source-charset 和 /execution-charset,功能相同。

u8 這個前綴,功能與 -fexec-charset=utf-8 或 /execution-charset:utf-8 一樣,就是用來限定這一個具體的 const char[] 數組類型的字面量在保存為位元組流時,編碼為 UTF-8 的。


第一個字元串是系統默認的字符集(也可能是utf8)。第二個就是utf8字符集了

在我這windows10簡中沒有開unicode的工程是gbk。linux可能兩種都是utf8了


Win10下應該不可能一樣...

u8是UTF8編碼的,不加u8是系統當前locale的編碼。中文環境下u8的strlen應該是3,不加u8的strlen應該是2,長度都不一樣。


推薦閱讀:

刨根究底字元編碼之七——ANSI編碼與代碼頁
刨根究底字元編碼之三——字元編碼的由來
神奇空格,輸入後再輸入文字自動倒置是什麼情況?
刨根究底字元編碼之一——關鍵術語解釋(上)

TAG:C | 字符集 |