UTF-8可以编码5或6字节序列,允许编码所有Unicode字符吗?我的标准越来越矛盾了.我需要能够支持每个Unicode字符,而不仅仅是那些U + 0000..U + 10FFFF范围内的字符.
(所有引用均来自RFC 3629)
第3节:
在UTF-8中,使用1到4个八位字节的序列对来自U + 0000..U + 10FFFF范围(UTF-16可访问范围)的字符进行编码.一个"序列"的唯一八位字节将高阶位设置为0,其余7个字节用于编码字符编号.在n个八比特组的序列中,n> 1,初始八比特组将n个高阶比特设置为1,然后将比特设置为0.该八比特组的其余比特包含来自字符数的比特.要编码.以下八位字节都将高阶位设置为1,后面的位设置为0,每个字节留下6位以包含要编码的字符的位.
那么不是所有可能的字符都可以用UTF-8编码吗?这是否意味着我不能编码来自不同平面的字符而不是BMP?
第2节:
从未出现八位字节值C0,C1,F5至FF.
这意味着我们不能用5或6个八位字节编码UTF-8值(或者甚至是4个不在上述范围内的一些)?
第12节:
将字符范围限制为0000-10FFFF(UTF-16可访问范围).
看看之前的RFC证实了这一点......他们减少了字符的范围.
第10节:
编码为UTF-8时会出现另一个安全问题:UTF-8的ISO/IEC 10646描述允许编码高达U + 7FFFFFFF的字符数,产生最多6个字节的序列.因此,如果字符数范围没有明确限制为U + 10FFFF,或者缓冲区大小没有考虑到5字节和6字节序列的可能性,则存在缓冲区溢出的风险.
那么这些序列是否符合ISO/IEC 10646定义,而不是RFC 3629定义?我应该遵循哪一个?
提前致谢.
归档时间: |
|
查看次数: |
1299 次 |
最近记录: |