单个UTF-8编码字符的最大字节数是多少?
我将加密以UTF-8编码的字符串的字节,因此需要能够计算出UTF-8编码的字符串的最大字节数。
有人能确认一下单个UTF-8编码字符的最大字节数吗
发布于 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是最常见的正确答案,所以我们得到了正确的答案。但是,里程可能会有所不同。
发布于 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设计的字符串函数直接进行编程。
https://stackoverflow.com/questions/9533258
复制相似问题