eMR*_*MRe 84 ascii utf-8 character-encoding
如果UTF-8是8位,这是否意味着最多只能有256个不同的字符?
前128个代码点与ASCII相同.但它说UTF-8可以支持多达百万个字符?
这是如何运作的?
zwi*_*pie 121
UTF-8不会一直使用一个字节,它是1到4个字节.
前128个字符(US-ASCII)需要一个字节.
接下来的1,920个字符需要两个字节进行编码.这涵盖了几乎所有拉丁字母的其余部分,以及希腊语,西里尔语,科普特语,亚美尼亚语,希伯来语,阿拉伯语,叙利亚语和Tāna字母表,以及组合变音符号.
基本多语言平面的其余部分中的字符需要三个字节,其中几乎包含所有常用字符[12],包括大多数中文,日文和韩文[CJK]字符.
Unicode的其他平面中的字符需要四个字节,其中包括不太常见的CJK字符,各种历史脚本,数学符号和表情符号(象形符号).
来源:维基百科
del*_*ver 36
UTF-8每个字符使用1-4个字节:ascii字符一个字节(前128个unicode值与ascii相同).但这只需要7位.如果设置了最高("符号")位,则表示多字节序列的开始; 连续高位设置的数量表示字节数,然后是0,其余位表示该值.对于其他字节,最高的两位将为1和0,其余6位用于该值.
因此,一个四字节序列将以11110 ...(... =该值的三个字节)开始,然后是三个字节,每个值为6位,产生一个21位值.2 ^ 21超过了unicode字符的数量,因此所有的unicode都可以用UTF8表示.
Eva*_*oll 18
Unicode将代码点解析为字符.UTF-8是Unicode的存储机制.Unicode有一个规范.UTF-8有一个规格.它们都有不同的限制.UTF-8具有不同的向上范围.
Unicode用"飞机"指定.每个平面携带2 16个代码点.Unicode中有17个Planes.总共17 * 2^16代码点.第一个平面,平面0或BMP,在其承载的重量上是特殊的.
不要解释所有的细微差别,让我在飞机上引用上面的文章.
17架飞机可以容纳1,114,112个码点.其中,2,048个是代理人,66个是非人物,137,468个是私人使用,留下974,530个公共任务.
现在让我们回到上面链接的文章,
UTF-8使用的编码方案设计具有更大的2 31个代码点(32,768个平面)的限制,并且即使限制为4个字节,也可以编码2 21个代码点(32个平面).[3] 由于Unicode将代码点限制为可由UTF-16编码的17个平面,因此UTF-8和UTF-32中高于0x10FFFF的代码点无效.
所以你可以看到你可以将东西放入UTF-8,这是无效的Unicode.为什么?因为UTF-8适用于Unicode甚至不支持的代码点.
UTF-8即使有四个字节的限制,也支持2 21个代码点,远远超过17 * 2^16
Rub*_*yes 15
2,164,864个"字符"可以由UTF-8编码.
这个数字是2 ^ 7 + 2 ^ 11 + 2 ^ 16 + 2 ^ 21,它来自编码的工作方式:
1字节字符有7位用于编码
0xxxxxxx(0x00-0x7F)
2字节字符有11位用于编码
110xxxxx 10xxxxxx(第一个字节为0xC0-0xDF;第二个字节为0x80-0xBF)
3字节字符有16位用于编码
1110xxxx 10xxxxxx 10xxxxxx(第一个字节为0xE0-0xEF;连续字节为0x80-0xBF)
4字节字符有21位用于编码
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx(第一个字节为0xF0-0xF7;连续字节为0x80-0xBF)
如您所见,这比当前的Unicode(1,112,064个字符)要大得多.
UTF-8是一种可变长度编码,每个字符至少 8位.
代码点较高的字符最多需要32位.
引自维基百科:“UTF-8 使用一到四个 8 位字节(在 Unicode 标准中称为“八位字节”)对 Unicode 字符集中的 1,112,064 个代码点进行编码。”
一些链接:
| 归档时间: |
|
| 查看次数: |
69680 次 |
| 最近记录: |