dsi*_*ard 103 unicode utf-8 character-encoding multibyte
unicode标准中有足够的代码点,你需要4个字节来存储它们.这就是UTF-32编码所做的.然而,UTF-8编码通过使用称为"可变宽度编码"的东西以某种方式将这些压缩到更小的空间.
实际上,它设法在一个字节中代表US-ASCII的前127个字符,它看起来与真正的ASCII完全相同,因此您可以将许多ascii文本解释为UTF-8而不对其执行任何操作.干净的把戏.那么它是怎样工作的?
我将在这里提出并回答我自己的问题,因为我只是做了一些阅读以弄清楚它并且我认为它可能会节省其他人一些时间.如果我有一些错误,也许有人可以纠正我.
dsi*_*ard 122
每个字节都以几位开头,告诉您它是单字节代码点,多字节代码点还是多字节代码点的延续.像这样:
0xxx xxxx A single-byte US-ASCII code (from the first 127 characters)
Run Code Online (Sandbox Code Playgroud)
多字节代码点每个都以几位开始,基本上说"嘿,你还需要读取下一个字节(或两个或三个)来弄清楚我是什么." 他们是:
110x xxxx One more byte follows
1110 xxxx Two more bytes follow
1111 0xxx Three more bytes follow
Run Code Online (Sandbox Code Playgroud)
最后,这些起始代码后面的字节都如下所示:
10xx xxxx A continuation of one of the multi-byte characters
Run Code Online (Sandbox Code Playgroud)
既然你可以从前几位看出你正在看什么类型的字节,那么即使某些东西被破坏了,你也不会丢失整个序列.
RFC3629 - UTF-8,ISO 10646的转换格式是此处的最终权威,并具有所有解释.
简而言之,表示单个字符的UTF-8编码的1到4字节序列的每个字节中的几个位用于指示它是否是尾随字节,前导字节,如果是,则跟随多少字节.其余位包含有效负载.
| 归档时间: |
|
| 查看次数: |
21635 次 |
| 最近记录: |