【问题标题】:Why does HTML treat 2 and 3-byte characters the same, but not 4-byte?为什么 HTML 将 2 字节和 3 字节字符视为相同,而不是 4 字节?
【发布时间】:2020-02-24 16:59:32
【问题描述】:

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

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

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

但是,我只能在该字段中获取 25 个 4 字节字符。按理说,因为它的字节数是原来的两倍,但是为什么在使用 3 字节字符时它仍然可以正常响应?多余的字节如何处理?

【问题讨论】:

    标签: html unicode byte maxlength


    【解决方案1】:

    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 将其表示为两个代码单元(称为代理对,请参见上面链接的常见问题解答)。

    【讨论】:

    • 干杯,我很难理解代码点。我知道的代理对,但 3 字节让我绊倒了。
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 2018-12-16
    相关资源
    最近更新 更多