让我们从C ++中的一个简单的行开始
char const* hello = "動画、読書な"; // I hope it is not offensive, I dont know what this means ))
并指出此行存储在utf-8编码文件中。 当我使用此行传递文件进行编译(结果是二进制代码)时,编译执行以下步骤:
问题是如何将常数存储在上面(“动画,読书な”)?它以某种方式转换它吗? 或者它只是从文件中“字符直到另一个”之后读取字节并按原样存储它们?那么它是否意味着最终的二进制代码取决于原始的源文件编码?
答案 0 :(得分:0)
源代码必须以实现定义的方式转换为ASCII,并在必要时使用转义序列保留原始编码的字符:
ISO / IEC 14882:2003(E)
2.1.1翻译阶段
物理源文件字符以实现定义的方式映射到基本源 字符集(为行尾引入换行符 指标)如有必要。 Trigraph序列(2.3)被替换为 相应的单字符内部表示。任何来源 不替换基本源字符集(2.2)中的文件字符 通过指定该角色的通用字符名称。 (一个 实现可以使用任何内部编码,只要是实际的 源文件中遇到的扩展字符,并且相同 扩展字符在源文件中表示为 处理通用字符名称(即使用\ uXXXX表示法) 等效。)
...
15)基本成员的字形 源字符集旨在识别来自的字符 ISO / IEC 10646的子集,对应于ASCII字符集。 但是,因为从源文件字符映射到源 字符集(在翻译阶段1中描述)被指定为 实现定义,需要一个实现来记录如何 基本源字符在源文件中表示。