一个2字节的UTF-8字符为有效载荷提供11位:
110x xxxx 10xx xxxx
我知道这不是很有效,但是为什么有效负载不能在较低范围内,例如'A'= 65?
65 decimal = 1000001 binary
two-byte template: 110_ ____ 10__ ____
payload: 1 00 0001
result: 1100 0001 1000 0001
答案 0 :(得分:3)
根据Wikipedia,该标准特别禁止这样做。尽管UTF-8算法允许您通过零填充使用多余的字节,但该标准规定代码点和编码字节序列之间存在一对一的映射。
像您呈现的那样的超长编码被视为无效的字节序列。
同样,即使算法可以使您达到U+10FFFF
,也不允许您对U+7FFFFFFF
以上的代码点进行编码。
但是,您 可以对尚未分配的代码点进行编码(即,尚无意义的代码)。
答案 1 :(得分:1)
这是安全隐患。允许软件解释“非最短格式” UTF-8会阻止准确而有效的字符串检查。 “ DROP T [41] BLE”不应与“ DROP T [C181] BLE”相同。如果将不良的UTF-8在使用前转换为良好的UTF-16,则会埋葬这种实现方式的问题。
http://www.unicode.org/versions/corrigendum1.html
(特别感谢lenz为我指出了有用的搜索字词。)