18

我需要将 Java 字符的十六进制代码生成为字符串,稍后再解析这些字符串。我发现here可以按如下方式进行解析:

char c = "\u041f".toCharArray()[0];

我希望有更优雅的东西,比如Integer.valueOf()用于解析。

如何正确生成十六进制 unicode?

4

3 回答 3

17

This will generate a hex string representation of the char:

char ch = 'ö';
String hex = String.format("%04x", (int) ch);

And this will convert the hex string back into a char:

int hexToInt = Integer.parseInt(hex, 16);
char intToChar = (char)hexToInt;
于 2013-05-27T09:12:28.890 回答
7

在做了一些更深入的阅读之后,javadoc 说基于参数的Characterchar方法不支持所有 unicode 值,但那些采用代码点(即int)的方法支持。

因此,我一直在执行以下测试:

    int codePointCopyright = Integer.parseInt("00A9", 16);

    System.out.println(Integer.toHexString(codePointCopyright));
    System.out.println(Character.isValidCodePoint(codePointCopyright));

    char[] toChars = Character.toChars(codePointCopyright);
    System.out.println(toChars);

    System.out.println();

    int codePointAsian = Integer.parseInt("20011", 16);

    System.out.println(Integer.toHexString(codePointAsian));
    System.out.println(Character.isValidCodePoint(codePointAsian));

    char[] toCharsAsian = Character.toChars(codePointAsian);
    System.out.println(toCharsAsian);

我得到:

在此处输入图像描述

因此,我不应该在我的问题中谈论char,而是谈论字符数组,因为 Unicode 字符可以用多个char. 另一方面,anint涵盖了这一切。

于 2013-05-27T11:47:51.740 回答
5

在字符串级别: 以下使用的不是 char 而是 int,例如中文,但也适用于 chars。

    int cp = "\u041f".codePointAt(0);
    String s = new String(Character.toChars(cp));

在 native2ascii 级别:\uXXXX如果要在Unicode 字符 之间来回转换,请使用来自apache、commons-langStringEscapeUtils

    String t = StringEscapeUtils.escapeJava(s + "ö");
    System.out.println(t);

在命令行 native2ascii 可以在 u-escaped 和 UTF-8 之间来回转换文件。

于 2013-05-27T10:56:53.090 回答