代码之家  ›  专栏  ›  技术社区  ›  java.is.for.desktop

Java:如何获得字符的Unicode名称(或它的类型类别)?

  •  16
  • java.is.for.desktop  · 技术社区  · 16 年前

    这个 Character Java中的类定义了检查给定的方法。 char 与某些Unicode字符相等或属于某个类型类别的参数。这些字符和类型类别被命名。

    如给定javadoc中所述,命名字符的示例如下
    HORIZONTAL TABULATION , FORM FEED
    命名类型类别的示例如下
    SPACE_SEPARATOR , PARAGRAPH_SEPARATOR ,…

    然而,存在 byte int 值而不是枚举,这些类型的名称在运行时是“隐藏”的。

    所以, 是否有可能在运行时获取字符和/或类型类别的名称?

    6 回复  |  直到 9 年前
        1
  •  14
  •   Mike Samuel    14 年前

    JDK7将有一个

    String getName(int codepoint)
    

    函数(Read:类Java.Lang.Grand中的一个静态方法,将代码点转换为其官方Unicode名称)。

    Javadoc: http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#getName%28int%29

        2
  •  9
  •   bmargulies    14 年前

    对。使用 ICU4J 图书馆。它有一个完整的ucd和一个api来从中获取信息。

        3
  •  2
  •   Arne Burmeister    16 年前

    这个 Character 类支持类别信息。看 Character.getType(char) 对于类别。但我不认为,你可以得到字符名。

        4
  •  1
  •   Community Mohan Dere    9 年前

    我在这里发布了一个.net实现: Finding out Unicode character name in .Net

    这应该非常容易移植到Java。您只需要下载Unicode数据库: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt 和Java等价于一个字符串分割方法和字典类,这两个都是Java中存在的。

    这是一个简单的选择,可以下载一些臃肿的库,这些代码中有大量的Unicode方法,Java和.NET都可能已经支持。

        5
  •  0
  •   trashgod    16 年前

    名字是 standard 可用于 limitations .

        6
  •  0
  •   Andrey    9 年前

    对于字符名,可以使用 Character.getName(int) . 但是,对于一般类别来说,这样做并不方便:

    // attach String names to Character constants
    Map<Byte, String> unicodeCategories = new HashMap<>();
    unicodeCategories.put(Character.COMBINING_SPACING_MARK, "Mc");
    unicodeCategories.put(Character.CONNECTOR_PUNCTUATION, "Pc");
    unicodeCategories.put(Character.CONTROL, "Cc");
    unicodeCategories.put(Character.CURRENCY_SYMBOL, "Sc");
    unicodeCategories.put(Character.DASH_PUNCTUATION, "Pd");
    unicodeCategories.put(Character.DECIMAL_DIGIT_NUMBER, "Nd");
    unicodeCategories.put(Character.ENCLOSING_MARK, "Me");
    unicodeCategories.put(Character.END_PUNCTUATION, "Pe");
    unicodeCategories.put(Character.FINAL_QUOTE_PUNCTUATION, "Pf");
    unicodeCategories.put(Character.FORMAT, "Cf");
    unicodeCategories.put(Character.INITIAL_QUOTE_PUNCTUATION, "Pi");
    unicodeCategories.put(Character.LETTER_NUMBER, "Nl");
    unicodeCategories.put(Character.LINE_SEPARATOR, "Zl");
    unicodeCategories.put(Character.LOWERCASE_LETTER, "Ll");
    unicodeCategories.put(Character.MATH_SYMBOL, "Sm");
    unicodeCategories.put(Character.MODIFIER_LETTER, "Lm");
    unicodeCategories.put(Character.MODIFIER_SYMBOL, "Sk");
    unicodeCategories.put(Character.NON_SPACING_MARK, "Mn");
    unicodeCategories.put(Character.OTHER_LETTER, "Lo");
    unicodeCategories.put(Character.OTHER_NUMBER, "No");
    unicodeCategories.put(Character.OTHER_PUNCTUATION, "Po");
    unicodeCategories.put(Character.OTHER_SYMBOL, "So");
    unicodeCategories.put(Character.PARAGRAPH_SEPARATOR, "Zp");
    unicodeCategories.put(Character.PRIVATE_USE, "Co");
    unicodeCategories.put(Character.SPACE_SEPARATOR, "Zs");
    unicodeCategories.put(Character.START_PUNCTUATION, "Ps");
    unicodeCategories.put(Character.SURROGATE, "Cs");
    unicodeCategories.put(Character.TITLECASE_LETTER, "Lt");
    unicodeCategories.put(Character.UNASSIGNED, "Cn");
    unicodeCategories.put(Character.UPPERCASE_LETTER, "Lu");
    // use the map to extract category name from the constant
    char ch = 'a'; // OR int ch = Character.codePointAt("a", 0);
    String category = unicodeCategories.get( (byte) (Character.getType(ch) ) );