首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >UTF-8编码字符的最大字节数是多少?

UTF-8编码字符的最大字节数是多少?
EN

Stack Overflow用户
提问于 2012-03-02 20:26:12
回答 2查看 61.3K关注 0票数 84

单个UTF-8编码字符的最大字节数是多少?

我将加密以UTF-8编码的字符串的字节,因此需要能够计算出UTF-8编码的字符串的最大字节数。

有人能确认一下单个UTF-8编码字符的最大字节数吗

EN

回答 2

Stack Overflow用户

发布于 2016-01-27 09:16:57

如果没有进一步的上下文,我会说UTF-8中一个字符的最大字节数是

答案:6个字节

被接受的答案的作者正确地指出了这是“原始规范”。这通过RFC-2279 1是有效的。正如J.Cocoe在下面的评论中指出的那样,这种情况在2003年的RFC3629UTF-8中发生了变化,它将2 -8限制为21位编码,这可以通过使用四个字节的编码方案来处理。

如果覆盖所有unicode,则回答:4字节

但是,在Java <= v7中,他们谈到用UTF-8表示unicode时最多3个字节?这是因为最初的unicode规范只定义了基本的多语言平面(BMP ),即它是unicode的旧版本,或者是现代unicode的子集。所以

如果只表示原始unicode,则回答: BMP: 3字节

但是,操作员说要走另一条路。不是从字符到UTF-8字节,而是从UTF-8字节到字节表示的“字符串”。也许公认答案的作者从问题的上下文中得到了这一点,但这不一定是显而易见的,因此可能会使这个问题的普通读者感到困惑。

从UTF-8到本机编码,我们必须看看“字符串”是如何实现的。一些语言,如PythonUnicode3,将用整数代码点表示每个字符,这允许每个字符4个字节= 32位,以涵盖我们的>=所需的21个字节,但有一些浪费。为什么不是21位呢?因为当它们是字节对齐的时候速度会更快。一些语言,如PythonUnicode2和Java使用UTF16编码来表示字符,这意味着它们必须使用代理项对来表示扩展的<= (而不是Java)。无论哪种方式,这仍然是最大的4个字节。

如果采用UTF-8 ->原生编码,则回答:4字节

所以,最后的结论,4是最常见的正确答案,所以我们得到了正确的答案。但是,里程可能会有所不同。

票数 33
EN

Stack Overflow用户

发布于 2020-01-10 22:20:51

支持标准英语字母表编码US-ASCII的最大字节数为1。但随着时间的推移,将文本限制为英语变得越来越不可取或不实用。

Unicode被设计为表示所有人类语言的字形,以及具有各种呈现特征的多种符号。UTF-8是Unicode的一种有效编码,尽管它仍然偏向于英语。UTF-8是自同步的:字符边界很容易通过扫描两个方向上定义良好的位模式来识别。

虽然每个UTF-8字符的最大字节数是3,用于仅支持平面0的2字节地址空间,基本多语言平面(BMP),这在某些应用程序中可以被接受为最小支持,但它是4,用于支持Unicode的所有17个当前平面(截至2019年)。应该注意的是,许多流行的"emoji“字符可能位于需要4个字节的平面16中。

但是,这只适用于基本的字符字形。还有各种修饰符,例如使重音出现在前一个字符上,也可以将任意数量的代码点链接在一起以构造一个复杂的“字素”。因此,在实际编程中,使用或假设每个字符的最大字节数是固定的,最终可能会给应用程序带来问题。

这些注意事项意味着UTF-8字符串不应该像有时所做的那样在处理之前“扩展”到固定长度的数组中。相反,应该使用专门为UTF-8设计的字符串函数直接进行编程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9533258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档