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 是单字节编码,不需要判断字节序)。


常见字符集字符编码
原始编码 电报码( Morse 电码 BCD 码IBM 卡编码 -
早期二进制码位分配的编码 - BCDICEBCDIC ASCIIISO 646-US 、 ISO 646-IRV)
地区字符编码 - - ISO 8859 : ISO 8859-1 、 ISO 8859-2 、……
- - EUC 类编码,含第一个国标字符集 GB 2312
其编码 EUC-CNIBM 代码页 936)也称 GB 2312
多地区字符编码通过切换串兼容 - - 通用框架: ISO 4873ISO 2022 ,含 ISO-2022-CN
ISO-2022-CN 的简化: HZ 编码
无需切换串的自同步编码 - UTF-EDCBIC 字符集 Unicode / ISO 10646 ,有常见编码 UTF-8UTF-16UTF-32 及废弃编码 UTF-1UTF-7
地区字符编码扩充 - - 国标系列后续:GBK微软代码页 936)、 GB 18030微软代码页 54936

参考资料

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