这篇博客介绍万国码中的实际存储编码
utf-8
utf-8是什么
utf-8
是一种实际存储编码- 它即可以存储理论编码
ucs2
又可以存储理论编码ucs4
- 变长存储,各个字符编码的长度可能不相同.
- 它是为了解决
ucs-2
中的浪费问题而产生的.
utf-8如何存储ucs2
方案
范围 | 方案 |
---|---|
0<x≤70 < x \leq 70<x≤7 | 0xxxxxxx |
7<x≤117 < x \leq 117<x≤11 | 110xxxxx 10xxxxxx |
11<x≤1611 < x \leq 1611<x≤16 | 1110xxxx 10xxxxxx 10xxxxxx |
16<x≤2116 < x \leq 2116<x≤21 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
21<x≤2621 < x \leq 2621<x≤26 | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
26<x≤3126 < x \leq 3126<x≤31 | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
编码步骤
- 第一步:查找原先的
ucs-2
编码- 例如
经
字的ucs-2编码为01111110 11001111
- 例如
- 第二步:以字节为单位去年高位的
0
- 去掉高位的0后,经字的编码变成了
1111110 11001111
,还剩下15位
- 去掉高位的0后,经字的编码变成了
- 第三步:把剩下的位数看作
x
,根据剩下的位数寻找对应的方案- 这里我们应该找到方案
1110xxxx 10xxxxxx 10xxxxxx
- 这里我们应该找到方案
- 第四步:按照"从右向左的顺序"将剩下的编码填充到方案的
x
上- 这里,要将
1111110 11001111
填充到1110xxxx 10xxxxxx 10xxxxxx
上 - 填充的结果应该是:1110x111 10111011 10001111
- 这里,要将
- 第五步:填充后如果还有剩下的x用0填充,得到utf-8编码
1110x111 10111011 10001111
中的x用0填充后得到11100111 10111011 10001111
- 所以汉字
经
的utf-8编码就是11100111 10111011 10001111