这篇博客介绍万国码中的实际存储编码
utf-8
utf-8是什么
utf-8
是一种实际存储编码- 它即可以存储理论编码
ucs2
又可以存储理论编码ucs4
- 变长存储,各个字符编码的长度可能不相同.
- 它是为了解决
ucs-2
中的浪费问题而产生的.
utf-8如何存储ucs2
方案
范围 | 方案 |
---|---|
0 < x ≤ 7 0 < x \leq 7 0<x≤7 | 0xxxxxxx |
7 < x ≤ 11 7 < x \leq 11 7<x≤11 | 110xxxxx 10xxxxxx |
11 < x ≤ 16 11 < x \leq 16 11<x≤16 | 1110xxxx 10xxxxxx 10xxxxxx |
16 < x ≤ 21 16 < x \leq 21 16<x≤21 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
21 < x ≤ 26 21 < x \leq 26 21<x≤26 | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
26 < x ≤ 31 26 < x \leq 31 26<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