代码之家  ›  专栏  ›  技术社区  ›  Kevin Patel

UTF-8内容在Java中是否可能格式错误

  •  0
  • Kevin Patel  · 技术社区  · 1 年前

    我正在尝试用java创建一个测试用例来测试

    decoder.onMalformedInput(CodingErrorAction.REPLACE);
    decoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
    
    

    我需要UTF_8字符集中的一些字符来测试它们。

    1 回复  |  直到 1 年前
        1
  •  2
  •   Basil Bourque    1 年前

    tl;博士

    UTF-8几乎可以代表地球上的任何字符,也就是Unicode中的所有字符。

    如果您询问UTF-8内容的样本是否存在格式错误,可以。以违反 rules described in Wikipedia 。我想这会触发你 onMalformedInput 但我没有试过。

    Unicode中大多数可能的代码点都有 已分配给任何字符。其中一些是为 “private use” ( Klingon 等等)。其中一些是为将来使用而保留的。也许UTF-8编码的文本包含任何为将来使用而保留的代码点,会触发 onUnmappableCharacter ,但我没有试过。

    详细信息

    未包含在UTF_8字符集中的任何字符

    你把两件不同的事情混为一谈:

    • A. 字符集 是字符的集合,每个字符都由一个指定的编号标识,该编号称为 code point 该集合可以包括单一人类语言或多种人类语言的字符。
    • A. 字符编码 是一种表示特定字符集的某些文本的方法,通过记录该文本中字符的代码点的位和字节。

    Unicode 是一个人物集,试图代表所有现存的和最具学术意义的死语言的人物。Unicode是所有其他字符集的超集。目前,Unicode 15已识别149186个字符。每个字符都被分配了一个代码点号,范围从零到100多万。

    UTF-8 是一种字符编码,使用一个或多个八位字节来表示每个分配的数字。UTF-8可以表示Unicode可以分配的超过一百万个可能的数字中的任何一个。

    因此,你很难找到地球上大多数人使用的任何尚未在Unicode中列出的字符。所有这些字符都可以用UTF-8编码。