字符编码发展历程
ASCII(American Standard Code for Information Interchange)编码
历史背景:计算机在小范围内使用,如美国;
编码规则:用一个字节中的7个bit位表示,范围为0x00~0x7F,可用于控制打字机,0~0x20用于控制,后面包括标点、数字、字母等符号。
ASCII扩展编码
历史背景:计算机在更多欧洲国家使用,ASCII不能够表示更多的欧洲字符;
编码规则:第8个bit位也用于表示字符,扩展范围(0x80~0xFF),表达范围0x00~0xFF。
ANSI(American National Standard Institite )编码
历史背景:计算机在亚洲国家使用,出现很多象形文字,如中文、日文、韩文等,ASCII扩展不能满足要求。
编码思想:根据自身特征,自定义文字编码,并得到ANSI认可。这样会出现多套编码,每套编码都遵循ANSI编码规则,如GB2312(简体中文)、BIG5(繁体中文)、JIT(日文)。
注意事项:ANSI编码只是一个标准,并不是具体的编码。
编码规则:
- 可以使用多字节标识;
- 各家自定义编码规则;
- ASCII原有编码保持不变,比如以前ASCII编码的表示的值,在新编码中表示的值一致;
MBCS(Multi-Byte Chactacter System(Set))
历史背景:ANSI编码标准和规则出现后,MBCS是对ANSI编码的实现。
编码规则:
- 遵循ANSI编码规则;
- 编码和解码规则各家自定义;
应用实例:GB2312(简体中文)、BIG5(繁体中文)、JIT(日文)等的具体编码
CodePage
历史背景:根据ANSI通过MBCS实现了多套字符集,一个系统、程序要支持多种字符编码是不是要打多个包呢。
解决方法:每套字符集用一个代码表示,该代码称为代码页CodePage,比如系统装了多套字符集(如GB2312、BIG5),通过代码快速实现切换到GB2312。
Unicode编码
历史背景:CodePage和各种字符集解决了一个操作系统、程序内保证使用同一套字符集,但是统一个系统、程序不能同时使用多套字符集,比如在记事本同时显示中文和韩文。
编码思想:大统一,一本容纳所有字符的大字典,摒弃各家自己实现字符集编码。
注意事项:Unicode是一个字符集码表,不是具体的实现。
编码规则:范围0-0x10FFFF,至少3个字节存储,还在不断升级完善中。
Unicode编码实现
历史背景:Unicode编码已提出,具体实现未落地
应用实例:UFT-8、UTF-16(UCS-2)、UTF-32(UCS-4)编码等等