为什么 HTML 将 2 字节和 3 字节的字符视为相同,而不是 4 字节的字符?

Why does HTML treat 2 and 3-byte characters the same, but not 4-byte?

我正在为一个网站做一些 GUI 工作,并对一些文本输入使用 "maxlength" 属性,其中一些可能包含 Unicode 字符。

假设我有一个 maxlength = 50 的文本字段,我在其中填充了 2 字节的 Unicode 字符 (UTF-16)。我可以在文本字段中输入 50 个字符。

我也可以对 3 字节的字符执行相同的操作。其中 50 个。

但是我只能在字段中得到 25 个 4 字节的字符。按理说,既然是2倍的字节数,为什么用3字节的字符还是能正常响应呢?如何处理额外的字节?

Unicode 字符通常可以用 UTF-8、UTF-16 或 UTF-32 (see their faq) 编码。你对 2、3 和 4 字节字符的使用告诉我你是从 UTF-8 的角度工作的。

然而,maxlength 属性是 defined as the maximum number of UTF-16 code units,而不是字节数。每个UTF-16编码单元是两个字节。

一个 2 字节的 UTF-8 字符将是一个 UTF-16 代码单元。一个 3 字节的 UTF-8 字符也将是一个单一的 UTF-16 代码单元。但是,一个 4 字节的 UTF-8 字符代表一个大于 0xFFFF 的 Unicode 字符。 UTF-16 将其表示为两个代码单元(称为代理对,请参阅上面链接的常见问题解答)。