1
如果我爲包含通用字符名稱的字符串文字省略u8
前綴,會發生什麼情況?省略包含通用字符名稱的字符串文字的u8前綴
所以不是:
u8"\u00a7some-text"
我寫這篇文章:
"\u00a7some-text"
如果我爲包含通用字符名稱的字符串文字省略u8
前綴,會發生什麼情況?省略包含通用字符名稱的字符串文字的u8前綴
所以不是:
u8"\u00a7some-text"
我寫這篇文章:
"\u00a7some-text"
沒有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
指向字節0xC2
0xA7
0x00
。
如果您使用u8
前綴,那麼您的字符串是保證爲UTF-8編碼,無論平臺的配置如何。