Java Char为其unicode十六进制字符串表示形式,反之亦然

Jér*_*nge 15 java unicode parsing hex char

我需要将Java字符的十六进制代码生成为字符串,并在以后再次解析这些字符串.我在这里发现解析可以执行如下:

char c = "\u041f".toCharArray()[0];
Run Code Online (Sandbox Code Playgroud)

我希望像Integer.valueOf()这样更优雅的东西进行解析.

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

noe*_*oel 13

这将生成char的十六进制字符串表示:

char ch = 'ö';
String hex = String.format("%04x", (int) ch);
Run Code Online (Sandbox Code Playgroud)

这会将十六进制字符串转换回char:

int hexToInt = Integer.parseInt(hex, 16);
char intToChar = (char)hexToInt;
Run Code Online (Sandbox Code Playgroud)


Jér*_*nge 6

在做了更深入的阅读之后,javadoc说基于参数的Character方法char不支持所有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);
Run Code Online (Sandbox Code Playgroud)

我得到了:

在此输入图像描述

因此,我不应该char在我的问题中谈论,而是谈论字符数组,因为Unicode字符可以用多个字符表示char.另一方面,它int涵盖了所有.


Joo*_*gen 5

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

    int cp = "\u041f".codePointAt(0);
    String s = new String(Character.toChars(cp));
Run Code Online (Sandbox Code Playgroud)

在native2ascii的水平: 如果你要来回之间的转换\uXXXX和Unicode字符,从使用的Apache,公共朗StringEscapeUtils:

    String t = StringEscapeUtils.escapeJava(s + "ö");
    System.out.println(t);
Run Code Online (Sandbox Code Playgroud)

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