2016-04-08 74 views

回答

3

沒有u8前綴,字符串將在執行字符編碼設置你的平臺。執行字符集可能是UTF-8(這是多個平臺上的默認值),但不能假定爲始終爲UTF-8(請參閱this answer)。

如果執行字符集不能編碼通用字符名稱(或字符串字面值中的任何其他值),則結果是實現定義的(即可能導致錯誤或一些標記值)。例如,考慮的代碼:

const char* c = "\u00a7"; 

當使用GCC 5.3 -fexec-charset=ascii編譯,它失敗,錯誤:

error: converting UCN to execution character set: Invalid or incomplete multibyte or wide character

這是因爲U + 00A7不能在ASCII編碼。然而,使用u8前綴:

const char* c = u8"\u00A7"; 

編譯成功,並c指向字節0xC20xA70x00

如果您使用u8前綴,那麼您的字符串是保證爲UTF-8編碼,無論平臺的配置如何。