带编码前缀的字符字面量内UCN(通用字符名)编码规则问询
字符字面量中UCN的编码规则解答
第一个问题:u'\uXXXX'场景下UCN的转换流程
答案是肯定的,转换流程完全符合描述的逻辑,具体步骤是固定的:
- 第一步:所有UCN(通用字符名,即
\uXXXX、\UXXXXXXXX格式的转义序列)都会先被解析为对应的ISO/IEC 10646(Unicode)码点,这一步和字符字面量的前缀完全无关,是UCN本身的语法规则要求。 - 第二步:解析得到码点后,才会根据字面量的前缀,将码点转换为对应编码的编码单元序列:
u前缀对应UTF-16编码:BMP(基本多语言平面)内的码点会转换为单个16位编码单元,超出BMP的码点会转换为一对代理字符U前缀对应UTF-32编码:码点直接对应单个32位编码单元u8前缀对应UTF-8编码:码点会转换为1~4个8位编码单元组成的序列- 无明确前缀的窄字符字面量:码点会转换为编译环境指定的执行字符集编码,若执行字符集不包含该码点,结果由编译器实现定义。
举个实际例子验证:
针对u'\u4e2d'的转换:
- 先解析UCN
\u4e2d,得到Unicode码点U+4E2D(对应汉字「中」) - 按照
u前缀要求转为UTF-16编码,该码点在BMP范围内,最终编码值为0x4E2D,和UCN的数值刚好一致。
第二个问题:带明确编码前缀的字面量中UCN的通用规则
不管字符字面量带哪种编码前缀,UCN的处理逻辑都是统一的:永远先解析为ISO/IEC 10646码点,再根据前缀对应的编码做转码,不存在UCN直接按照前缀编码解析的情况。
内容的提问来源于stack exchange,提问作者Avva
相关产品推荐
相关产品推荐

