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