当前位置: 首页 > 知识库问答 >
问题:

UTF-8可以编码多少个字符?

鲁永福
2023-03-14

如果UTF-8是8位,不意味着最多只能有256个不同的字符吗?

前128个代码点与ASCII中的相同。但是它说UTF-8可以支持多达百万个字符?

这是怎么回事?

共有3个答案

陆正德
2023-03-14

Unicode将代码点解析为字符。UTF-8是Unicode的一种存储机制。Unicode有一个规范。UTF-8有一个规范。它们都有不同的限制。UTF-8具有不同的上界。

Unicode被指定为“平面”每架飞机携带2个16个代码点。Unicode中有17个平面。总共为17*2^16代码点。第一个平面,平面0或BMP,在其承载的重量方面是特殊的。

与其解释所有的细微差别,不如让我引用上面关于飞机的文章。

这17架飞机可容纳1114112个代码点。其中2048个为代理,66个为非字符,137468个为私人使用,974530个为公共分配。

现在让我们回到上面链接的文章,

UTF-8使用的编码方案被设计为具有更大的限制231代码点(32,768个平面),并且可以编码221代码点(32个平面),即使限制为4个字节。[3]由于Unicode将代码点限制为可由UTF-16编码的17个平面,因此在UTF-8和UTF-32中,高于0x10FFFF的代码点无效。

所以您可以看到,您可以将无效Unicode的内容放入UTF-8中。为什么?因为UTF-8包含Unicode甚至不支持的代码点。

UTF-8即使有四字节限制,也支持2个21代码点,远远超过17*2^16

全鸿晖
2023-03-14

UTF-8每个字符使用1-4个字节:一个字节用于ascii字符(前128个unicode值与ascii相同)。但这只需要7位。如果设置了最高(“符号”)位,则表示多字节序列的开始;连续高位集的数量表示字节数,然后是0,剩余的位表示该值。对于其他字节,最高两位为1和0,其余6位为值。

所以一个四字节的序列将以11110开始。。。(和…=值的三位)然后是三个字节,每个字节6位,产生一个21位的值。2^21超过了unicode字符数,因此所有unicode都可以用UTF8表示。

巫马安怡
2023-03-14

UTF-8并不总是使用一个字节,它是1到4个字节。

前128个字符(US-ASCII)需要一个字节。

接下来的1920个字符需要两个字节进行编码。这涵盖了几乎所有拉丁字母的其余部分,也包括希腊语、西里尔语、科普特语、亚美尼亚语、希伯来语、阿拉伯语、叙利亚语和塔纳语字母,以及组合变音符号。

基本多语言平面的其余部分需要三个字节,基本多语言平面包含几乎所有常用的字符[12],包括大多数中文、日文和韩文[CJK]字符。

Unicode的其他平面中的字符需要四个字节,包括不太常见的CJK字符、各种历史脚本、数学符号和表情符号(象形符号)。

资料来源:维基百科

 类似资料:
  • 问题内容: 我遇到了这行遗留代码,我试图找出这些遗留代码: 据我了解,它是使用相同的charSet进行编码和解码。 这与以下内容有何不同? 在任何情况下,两条生产线的输出将不同? ps:只是要澄清一下,是的,我知道Joel Spolsky撰写的关于编码 的出色文章! 问题答案: 这可能是很复杂的方式 这缩短了String,而所使用的基础char []则更长。 但是,更具体地说,将检查每个字符是否都

  • 问题内容: 根据MySQL,一列可容纳65,535个字节。 因此,如果这是一个合理的边界,那么它实际上只能容纳大约32k UTF-8字符,对吗?还是这是“模糊的”界限之一,编写文档的人无法分辨字节中的字符,并且如果将其设置为类似内容,实际上将允许〜64k UTF-8字符? 问题答案: 一列最多可包含字节。 一个字符最多可以为3个字节。 所以…您的实际限制可以是字符。 有关更多信息,请参见手册:ht

  • 问题内容: 我想从请求中获取参数(带有重音符的字符),但是它不起作用。我尝试使用,但也没有用。 我知道返回正确的字符,但不起作用! 有人有主意吗? 问题答案: Paul的建议似乎是最好的做法,但如果要解决此问题,则根本不需要URLEncoder或URLDecoder: 更新: 由于获得了很多选票,我想强调BalusC的观点,即这绝对不是解决方案。充其量是一种解决方法。人们不应该这样做。 我不知道是

  • 问题内容: 我正在用python做一些脚本。我创建一个保存在文件中的字符串。这个字符串有很多数据,来自目录的树状结构和文件名。根据convmv的介绍,我所有的树状结构都是UTF-8。 我想将所有内容都保留在UTF-8中,因为之后我将其保存在MySQL中。现在,在UTF-8的MySQL中,我遇到了一些字符问题(例如é或è-我是法语)。 我希望python始终将字符串用作UTF-8。我在互联网上阅读了

  • 问题内容: 我有一个带有“ñ”字符的字符串,并且我有一些问题。我需要将此字符串编码为UTF-8编码。我已经通过这种方式尝试过,但是没有用: 如何将该字符串编码为utf-8? 问题答案: Java中的对象使用无法修改的UTF-16编码。 唯一可以使用不同编码的是。因此,如果你需要UTF-8数据,则需要一个。如果你有一个包含意外数据的,则问题出在较早的地方,该错误地将一些二进制数据错误地转换为a (即

  • 问题内容: 这个问题已经在这里有了答案 : UTF-8贯穿始终 (15个答案) 5年前关闭。 寻求 我正在寻找具有重音符号的行。列()的编码为。 编码 以下查询使用phpMyAdmin 返回: 以下显示期望值(称为函数): 显示的值: 然后使用以下代码对数组进行编码: 问题 Web浏览器收到以下值: 代替: (或等效的编码形式。) 题 文档指出可以在UTF-8上使用。我可以看到将值从LATIN1编