UTF-1
UTF-1 | |
---|---|
术语名称 | UTF-1 |
英语名称 | UTF-1 |
UTF-1 是一个将 Unicode 字符集编码为字节流的字符编码方法。该方法已过时。 UTF 即 Unicode Transformation Format , Unicode 传输格式。
这一编码是变长编码,每一个 Unicode 码位会被编码为 1、2、3、5 个字节。其编解码算法由于涉及非 2 的幂的乘除法,相对缓慢;且其需要使用 ASCII 中的可打印字符,会导致直接从字节串中判断 ASCII 中特殊可打印字符的方法失效,也就是对 ASCII 不兼容。这两个严重缺陷使得这一编码方式未受到广泛使用,而是快速被 UTF-8 代替。
编码规则
UTF-1 会保证 0x00-20
和 0x7F-9F
不被多字节编码使用。这一点可以看作是对 ISO 2022 的兼容,对于 C0 和 C1 控制字符区域、空格字符 SPACE 和擦除字符 DEL 的所有单次出现时都保证其是这个字符本身。因此多字节字符编码中实际上字节只会使用剩下的 190 个取值。为使用这一方法,算法中会使用较多的对 190 取余数的运算。
UTF-1 使用单字节的 0x00-9F
编码原本的范围,也就是 U+0000-009F
。
然后, U+00A0-00FF
使用对应的双字节编码 0xA0.A0-FF
,也就是使用 0xA0
后连接上原来的字符。
接着,从 0xA1.21
开始到 0xF5.FF
,共计 85×190=16150 ,即 3F16H 个编码,代表的是从 U+0100
开始到 U+4015
的字符,可以认为是去掉 100H 偏移量以后拆分成两位的 190 进制,再将每个位各自对应到这 190 个可用的单字节取值上。
接着是三字节范围,从 0xF6.21.21
到 0xFB.FF.FF
,共计 6×190×190=216600 ,即 34E18H 个编码,代表的是从 U+4016
开始到 U+38E2D
的字符,可以认为是去掉 4016H 偏移量以后拆分成三位 190 进制,再将每个位各自对应到这 190 个可用的单字节取值上。
接着是五字节范围,从 0xFC.21.21.21.21
到 0xFC.21.39.6E.6C
的范围编码从 U+38E2E
到 U+10FFFF
(现代 Unicode 最后一个码位)的字符。在最初规划中需要编码全部 U+0000-7FFFFFFF
范围所以理论范围是到 0xFD.BD.2B.B9.40
。同样相当于是多位的 190 进制数并对应。
BOM
带有 BOM 字符的 UTF-1 总是会把 BOM 编码为 0xF7.64.4C ÷dL
,可以用于判定编码(不过 UTF-1 是单字节编码,不需要判断字节序)。
常见字符编码 | |
---|---|
早期编码 | 电报码、 BCD 码 (BCDIC、EBCDIC)、ASCII (ISO 646) |
ISO 8859 | ISO 8859-1 、 ISO 8859-2 、…… |
国标系列 | IBM 代码页 936 / GB 2312 、 微软代码页 936 / GBK 、 微软代码页 54936 / GB 18030 |
Unicode / ISO 10646 | UTF-7 、 UTF-8、 UTF-16 、 UTF-32 |