首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >6个八进制UTF-8序列有效吗?

6个八进制UTF-8序列有效吗?
EN

Stack Overflow用户
提问于 2010-08-24 17:24:17
回答 3查看 1.8K关注 0票数 8

UTF-8可以编码5或6字节序列,允许对所有Unicode字符进行编码吗?我有矛盾的标准。我需要能够支持每个Unicode字符,而不仅仅是U+0000..U+10FFFF范围内的那些。

(所有引号都来自RFC 3629)

第3节:

在UTF-8中,来自U+0000..U+10FFFF范围( UTF-16可访问范围)的字符是使用1到4个八进制序列编码的。“序列”中唯一的八进制设置为0,其余7位用于编码字符号。在n个八进制的序列中,n>1,初始八位组的n个高阶位被设置为1,然后一个位被设置为0。该八位组的剩余位包含要编码的字符数中的位。下面的八位组都将高阶位设置为1,下面的位被设置为0,在每个位中留下6位,以包含来自待编码字符的位。

所以不是所有可能的字符都可以用UTF-8编码?这是否意味着我不能从不同的平面编码字符比BMP?

第2节:

C0、C1、F5到FF的八进制值从未出现。

这意味着我们不能用5或6个八位数来编码UTF-8值(甚至有些UTF-8值的UTF-8值不属于上述范围)?

第12款:

将字符范围限制为0000-10 10FFFF( UTF-16可访问范围)。

查看前面的RFC确认this...they缩小了字符的范围。

第10款:

另一个安全问题是在对UTF-8进行编码时发生的: ISO/IEC 10646对UTF-8的描述允许将字符编号编码到U+7FFFFFFF,产生最多6个字节的序列。因此,如果字符号的范围不明确地限制为U+10FFFF,或者缓冲区大小没有考虑到5字节和6字节序列的可能性,则存在缓冲区溢出的风险。

因此,这些序列是允许的ISO/IEC 10646定义,而不是RFC 3629定义?我该跟着哪一个?

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-24 17:32:07

它们不是超过10FFFF的Unicode字符,BMP通过FFFF覆盖0000。

对于0-10FFFF,UTF-8定义得很好。

票数 9
EN

Stack Overflow用户

发布于 2010-08-24 17:36:12

UTF-8和UTF-16都允许对所有Unicode字符进行编码.不允许UTF-8编码上、下代理项( UTF-16使用的)或高于U+10FFFF的值,这不是合法的Unicode。

注意,BMP以U+FFFF结尾。

票数 2
EN

Stack Overflow用户

发布于 2010-08-31 03:07:39

我不得不说不: Unicode代码点对0,0x10FFFF范围有效,而那些映射到1-4个八位数。所以,如果你遇到了一个5-或6-八位的UTF-8编码编码点,它不是一个有效的代码点--那里肯定没有指定的任何东西。我有点困惑,为什么他们在ISO标准-我找不到一个解释。

然而,这确实让你怀疑,如果将来有一天,他们会扩展过去的U+10FFFF。0x10FFFF允许超过一百万个字符,但是有很多字符,这将取决于最终编码了多少字符。(看在理智的份上,我们希望不是,一百万个字是很多的!)UTF-32可以处理更多的代码点,正如您已经发现的那样,UTF-8可以。这将是真正的UTF-16,这是不走运的-将需要更多的代孕对将需要在某个地方的代码点。

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

https://stackoverflow.com/questions/3559161

复制
相关文章

相似问题

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