UTF-1

来自GSXAB的知识库
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-200x7F-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.210xFB.FF.FF ,共计 6×190×190=216600 ,即 34E18H 个编码,代表的是从 U+4016 开始到 U+38E2D 的字符,可以认为是去掉 4016H 偏移量以后拆分成三位 190 进制,再将每个位各自对应到这 190 个可用的单字节取值上。

接着是五字节范围,从 0xFC.21.21.21.210xFC.21.39.6E.6C 的范围编码从 U+38E2EU+10FFFF (现代 Unicode 最后一个码位)的字符。在最初规划中需要编码全部 U+0000-7FFFFFFF 范围所以理论范围是到 0xFD.BD.2B.B9.40 。同样相当于是多位的 190 进制数并对应。

BOM

带有 BOM 字符的 UTF-1 总是会把 BOM 编码为 0xF7.64.4C ÷dL ,可以用于判定编码(不过 UTF-1 是单字节编码,不需要判断字节序)。


常见字符编码
早期编码 电报码、 BCD 码BCDICEBCDIC)、ASCIIISO 646
ISO 8859 ISO 8859-1 、 ISO 8859-2 、……
国标系列 IBM 代码页 936 / GB 2312微软代码页 936 / GBK微软代码页 54936 / GB 18030
Unicode / ISO 10646 UTF-7 、 UTF-8UTF-16UTF-32

参考资料

https://en.wikipedia.org/wiki/UTF-1