为什么 HTML 对 2 字节和 3 字节字符的处理相同,而对 4 字节字符则不同?

Mic*_*ael 3 html unicode byte maxlength

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

假设我有一个 maxlength = 50 的文本字段,我用 2 字节 Unicode 字符 (UTF-16) 填充它。我可以在文本字段中获得 50 个字符。

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

但是,我只能在该字段中获得 25 个 4 字节字符。按理说,既然是字节数的两倍,但是为什么在使用3字节字符时它仍然正常响应?额外的字节是如何处理的?

DPe*_*er1 5

Unicode 字符通常可以编码为 UTF-8、UTF-16 或 UTF-32(请参阅他们的常见问题解答)。您对 2、3 和 4 字节字符的使用告诉我您是从 UTF-8 的角度工作的。

但是, maxlength 属性定义为 UTF-16 代码单元的最大数量,而不是字节数。每个 UTF-16 代码单元是两个字节。

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