UTF-8单字节字符完全映射到Latin-1(ISO 8859-1)字符(字符代码128以下);基本上是默认的ASCII字符。 如果我有一个UTF-8编码的字符串并将其传递给一个函数,那么期望Latin-1字符串是否有可能将Latin-1函数误解为部分UTF-8 mutlibyte字符为ASCII字符?
我想象可以发生的事情:
(imagniray)UTF-8多字节字符:0xA330
(mis-)由Latin-1函数解释为两个Latin-1字符:0xA3
0x30
这些字符中的第一个不在ASCII集内,但第二个是0字符的ASCII码。是否有可能多字节UTF-8字符产生一个看起来像单字节UTF-8 / ASCII字符的工件,如上例所示?
根据我对UTF-8的理解,只有单字节字符包含未设置最高位的任何字节,因此基本上多字节字符永远不会包含可被Latin-1函数误解为有效ASCII字符的字节(因为所有这些字符都有最重要的位未设置)。但我想确保这是真的,我不会搞砸这个,因为在处理数据清理时这可能会带来安全隐患 - 我显然正在这样做。
答案 0 :(得分:3)
您的理解是正确的,只有单字节字符包含任何未设置最高位的字节。有一个很好的表格显示在:http://en.wikipedia.org/wiki/UTF-8#Description