控制序列在各类编码中数值是否统一?解析器开发技术问询
关于ASCII控制字符在不同编码中的数值一致性
你观察到的Ctrl-Z对应十进制26(十六进制0x1A)是对的,而且所有ASCII控制字符(0x00-0x1F区间)在latin1、utf8、windows-1252这些编码里,数值编号完全一致,原因如下:
- ASCII控制字符的定义是
0x00到0x1F的字节值,Ctrl-Z是其中的0x1A,这是所有兼容ASCII的编码的基础约定。 - Latin1(ISO-8859-1):直接完整映射ASCII的
0x00-0xFF字节范围,0x1A的数值和含义完全保留。 - Windows-1252:作为Latin1的扩展,
0x00-0x7F区间和ASCII完全一致,0x1A自然保持原数值不变。 - UTF-8:对于ASCII范围内的字符(
0x00-0x7F),采用单字节编码,字节值和ASCII完全相同,所以0x1A在UTF-8中就是单字节0x1A,和其他编码无差异。
需要注意的是,只有当字符超出ASCII范围(0x80及以上)时,不同编码才会出现数值映射的差异,但你关注的控制字符都在ASCII核心区间内,所以不用考虑编码差异对其数值的影响。
内容的提问来源于stack exchange,提问作者user12582392
相关产品推荐
相关产品推荐

