字符集总结

SBCS(single-byte character set):ISO-8859-1
DBCS(double-byte character set):USC-2
MBCS(multi-byte character set):GB2312、GBK、UTF-8、…
Big Endian:正序存储字节,对于字符串 AB 存储形式为 00 41 00 42
Littile Endian:逆序存储字节,对于字符串 AB 存储形式为 41 00 42 00
Big Endian与Littile Endian使用BOM区分:
BOM(Big Endian):文件开头添加0xFEFF
BOM(Littile Endian):文件开头添加0xFFFE
下图为windows系统记事本存储对应编码:
USC-2转UTF-8规则:
ISO-8859-1 不变
00000000 10000000↔0x0080 => 1100000 10000000
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
00000xxx 1xxxxxxxx↔0x0XXX => 110xxxxx 10xxxxxx
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
00000111 11111111↔0x07FF => 11011111 10111111
00001000 00000000↔0x0800 => 11100000 10000000 10000000
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
xxxx1xxx xxxxxxxxx↔0xXXXX => 1110xxxx 10xxxxxx 10xxxxxx
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
11111111 11111111↔0xFFFF => 11101111 10111111 10111111
Q:在记事本中存储字符串“联通”再次打开乱码?
A:
记事本默认使用ANSI编码存储字符,在简体中文系统中即为GBK编码。“联通”对应GBK编码为:
11000001 10101010
–C—-1– –A—-A–
11001101 10101000
–C—-D– –A—-8–
与UTF-8两字节编码规则相吻合,故记事本误以为是UTF-8编码的两个字符
11000001 10101010
11001101 10101000
去除前缀,前面补0,得出相应USC-2编码
00000000 01101010
–0—-0– –6—-A–
00000011 01101000
–0—-3– –6—-8–
故乱码
本文采用 CC BY-NC-SA 3.0 Unported 协议进行许可



