我试图了解什么是" Unicode字符串"是的,我读的unicode standard越多,我理解的就越少。让我们从一个来自unicode标准的定义开始。
unicode scalar value
是包含在0x0和0xD7FF之间的任何整数,或者包含在0xE000和0x10FFFF之间的任何整数(D76,p:119) My feeling was that a unicode string is a sequence of unicode scalar values
。我将UTF-8 unicode string
定义为UTF-8
中编码的unicode标量值序列。但我不确定是不是这样。以下是我们在标准中可以看到的众多定义之一。
但对我来说这个定义非常模糊。只是太了解它有多糟糕,这里有一些其他的定义"或标准中的奇怪事情。
(p:43)" Unicode字符串数据类型只是一个有序的代码单元序列。因此,Unicode 8位字符串是8位代码单元的有序序列。" 根据该定义,uint8的任何序列都是有效的UTF-8。我会排除这个定义,因为它会接受任何东西作为unicode字符串!!!
(p:122)" Unicode字符串在所有条件下都不需要包含格式良好的代码单元序列。这相当于说特定的Unicode字符串不必是Unicode编码形式。例如,谈论采用两个Unicode 16位字符串< 004D D800>的操作是完全合理的。并且,每个包含格式错误的UTF-16代码单元序列,并将它们连接起来形成另一个Unicode字符串< 004D D800 DF02 004D>,其包含格式良好的UTF-16代码单元序列。前两个Unicode字符串不是UTF-16,但生成的Unicode字符串是。" 我会排除这个定义,因为不可能为UTF-16编码的unicode字符串定义一个unicode标量值序列,因为这个定义允许切换代理对!!!
首先,让我们寻找UTF-8 unicode string
的明确定义。到目前为止,我可以提出3个定义,但真实的定义(如果有的话)可能会有所不同:
UTF-8
UTF-8
为了具体化,这里有几个例子:
UTF-8 unicode string
,但不是定义2和3,因为来自UTF-8
编码的unicode标量值的代码单元序列中不会出现0xFF UTF-8 unicode string
,但不是根据定义2,因为它是多字节代码单元的前导字节。我只是迷失了这个"标准"。你有明确的定义吗?
答案 0 :(得分:0)
我的感觉是unicode字符串是一系列unicode标量值。
不,Unicode字符串是代码单元的序列。标准不包含"许多定义",但只包含一个:
D80 Unicode字符串:包含特定Unicode编码格式的代码单元的代码单元序列。
这并不要求字符串格式正确(请参阅以下定义)。标准中没有其他引用与此定义相矛盾。相反,它们只说明了标准定义的Unicode字符串可能格式不正确。
应用程序只能创建格式良好的字符串,当然:
如果Unicode字符串声称采用Unicode编码形式,则它不得包含任何格式错误的代码单元子序列。
但该标准还包含一些关于如何处理格式错误的输入序列的部分。