以字节为单位的长度不能被二整除的 UTF-16 字符串是否总是无效的?
Is a UTF-16 string whose length in bytes is not divisible by two always invalid?
如果您有一个 UTF-16 字符串,其字节长度例如为 21。可以立即说该字符串中包含无效的 UTF-16 是否安全?我没有计算这里的空终止符。我只是在计算实际的文本数据。我的理由是,在 UTF-16 中,文本元素被编码为 1 或 2 个双字节序列。
答案是是的,当然。正如你所说,
UTF-16 text elements are encoded as 1 or 2 two-byte sequences.
两字节序列的一半总是无效的。
但请注意:您说您“不计入此处的空终止符”。但是 UTF-16 中不能有单字节空终止符,因为单个 0x00
字节可以是有效 UTF-16 字节对的最低有效字节。例如,称为“带有长音符的拉丁文大写字母 A”的字符 Ā 是 Unicode U+0100
,即 UTF-16LE(小端)中的字节序列 0x00 0x01
或 UTF- 中的 0x01 0x00
16BE(大端)。
如果您有一个 UTF-16 字符串,其字节长度例如为 21。可以立即说该字符串中包含无效的 UTF-16 是否安全?我没有计算这里的空终止符。我只是在计算实际的文本数据。我的理由是,在 UTF-16 中,文本元素被编码为 1 或 2 个双字节序列。
答案是是的,当然。正如你所说,
UTF-16 text elements are encoded as 1 or 2 two-byte sequences.
两字节序列的一半总是无效的。
但请注意:您说您“不计入此处的空终止符”。但是 UTF-16 中不能有单字节空终止符,因为单个 0x00
字节可以是有效 UTF-16 字节对的最低有效字节。例如,称为“带有长音符的拉丁文大写字母 A”的字符 Ā 是 Unicode U+0100
,即 UTF-16LE(小端)中的字节序列 0x00 0x01
或 UTF- 中的 0x01 0x00
16BE(大端)。