Html 为什么当我将一个随机的UTF-8网页视为UTF-16时,很可能会看到汉字?

Html 为什么当我将一个随机的UTF-8网页视为UTF-16时,很可能会看到汉字?,html,unicode,encoding,utf-8,Html,Unicode,Encoding,Utf 8,出于好奇,我在一个随机的英文网页的编码菜单中选择了UTF-16,看看会发生什么(在Chrome:Tools->Encoding->Unicode(UTF-16LE)上)。我感兴趣的是,我看到的几乎所有mojibake都是汉字(和一些整数符号) 当从ASCII/UTF-8英语转换到UTF-16时,是否有统计上的原因可以看到中文字符?是HTML标记中的随机非中文特殊字符吗?大多数英文字符在[0x40-0x5a]中采用ASCII编码hex范围。如果您将UTF-8转码到UTF-16,您的大多数字符将在范

出于好奇,我在一个随机的英文网页的编码菜单中选择了UTF-16,看看会发生什么(在Chrome:Tools->Encoding->Unicode(UTF-16LE)上)。我感兴趣的是,我看到的几乎所有mojibake都是汉字(和一些整数符号)


当从ASCII/UTF-8英语转换到UTF-16时,是否有统计上的原因可以看到中文字符?是HTML标记中的随机非中文特殊字符吗?

大多数英文字符在
[0x40-0x5a]中采用ASCII编码
hex范围。如果您将UTF-8转码到UTF-16,您的大多数字符将在范围
[0x4040-0x5a5a]
内,该范围将有效地映射到中文字符

大多数英文字符在
[0x40-0x5a]
十六进制范围内进行ASCII编码。如果您将UTF-8转码到UTF-16,您的大多数字符将在范围
[0x4040-0x5a5a]
,它可以很好地映射到中文字符

,因为UTF-16中最小的单元有两个字节长,最“低”的第一个字节像拉丁语这样的字符以
NUL
字节开始:
00xx
。由于正常内容通常不包含
NUL
字节,因此在将随机字节序列解释为UTF-16时,几乎不可能命中拉丁字符。UTF-8编码内容的大部分字节将位于中下部,比如
466f。这恰好是许多亚洲语言在UTF-16中的位置,因为汉语是一个巨大的块,你很可能会碰到它。

因为UTF-16中最小的单位是两个字节长,所以最“低”的第一个字节像拉丁语这样的字符以
NUL
字节开始:
00xx
。由于正常内容通常不包含
NUL
字节,因此在将随机字节序列解释为UTF-16时,几乎不可能命中拉丁字符。UTF-8编码内容的大部分字节将位于中下部,比如
466f。这恰好是许多亚洲语言在UTF-16中所处的位置,因为中文是一个巨大的块,你很可能会碰到它。

我同意劳尔·安德烈斯的观点,只要你将ASCII或UTF-8中只包含ASCII字符的部分视为UTF-16。但是,如果你的UTF-8内容包含泰国语、希伯来语或其他导致utf-8中出现2字节、3字节或4字节序列的语言。

我同意Raul Andres的观点,只要您将仅包含ASCII字符的ASCII或utf-8视为utf-16。但是,如果您的utf-8内容包含导致2字节、3-b的泰国语、希伯来语或其他语言,则您可能不再查看中文字符utf-8中的字节或4字节序列