兼容问题
由于ASCII存在字符含量过少的缺陷,所以不但我国自己搞出了国际码。其他国家也都设计出了符合自己国情的字符集
但是这就带来了问题
各个字符集之间不兼容怎么办?
Unicode
Unicode 4个字节32位
真正有效范围: 0x0 – 0x 10ffff
约十进制:1114112 个字符
unicode相当于 “区位码”(也就是电脑中运行的),实际存储要按照相应的编码方案
字符集 编码方案
UTF-8
UTF-16
UTF-8的存储
UNICODE编码(16进制) | UTF8字节流(二进制) |
---|---|
000000 – 00007F | 0xxxxxx |
000080 – 0007FF | 110xxxxx 10xxxxxx |
000800 – 00FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
090000 – 10FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
例子:
比如 “啊” => UNICODE = 554A
0x00554A 处于区间 000800 - 00FFFF
所以格式为: 1110xxxx 10xxxxxx 10xxxxxx
0x554a
二进制为 : 0101 0101 0100 1010
所以实际存储的内容为:
格式:
1110xxxx 10xxxxxx 10xxxxxx
填充:
11100101 10010101 10001010
实际则为:
E5958A
UTF-16的存储
unicode 范围: 0x00000000 – 0x0010FFFF
uft-16
多语言字符区
0x00000000 – 0x0000ffff => 占两个字节
辅助平面区
0x00100000 – 0x0010FFFF => 占四个字节
以16位2字节进行对齐
总的来说存储比较复杂。。。