编写以下代码是否可以?
const char* str = "§some-text";
如果源文件是以UTF-8编码保存的,str
是否包含§
字符的正确UTF-8表示形式?
或者写它的唯一方法是使用u8
- 前缀字符串文字?
答案 0 :(得分:1)
是否可以在源代码中使用Unicode字符(而不仅仅是字符串文字)是实现定义的。可移植的唯一方法是坚持使用"基本源字符集"并使用u8"\u00a7some-text"
。
[lex.phases] / 1:
物理源文件字符以实现定义的方式映射到基本源字符集(如果需要,引入行尾指示符的换行符)。接受的物理源文件字符集是实现定义的。任何不在基本源字符集(2.3)中的源文件字符都将替换为指定该字符的通用字符名称。 (实现可以使用任何内部编码,只要源文件中遇到的实际扩展字符,以及源文件中表示为通用字符名称的相同扩展字符(例如,使用\ uXXXX表示法),处理等效,除非在原始字符串文字中还原此替换。)
"基本源字符集"是:
基本源字符集由96个字符组成:空格字符,表示水平制表符的控制字符,垂直制表符,换页符和换行符,以及以下91个图形字符:
a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9
_ {} []#()< > %:; 。 ? * + - / ^& | 〜! =,\" “