我需要将Java字符的十六进制代码转换成字符串,并稍后再次解析这些字符串。我在这里发现可以按照以下方式执行解析:
char c = "\u041f".toCharArray()[0];
我希望有像Integer.valueOf()这样更优雅的方式进行解析。
怎么样才能正确地生成十六进制unicode呢?
我需要将Java字符的十六进制代码转换成字符串,并稍后再次解析这些字符串。我在这里发现可以按照以下方式执行解析:
char c = "\u041f".toCharArray()[0];
我希望有像Integer.valueOf()这样更优雅的方式进行解析。
怎么样才能正确地生成十六进制unicode呢?
这将生成字符的十六进制字符串表示:
char ch = 'ö';
String hex = String.format("%04x", (int) ch);
这将把十六进制字符串转换回 char:
int hexToInt = Integer.parseInt(hex, 16);
char intToChar = (char)hexToInt;
char c = '\u041f';
(即П)或\u4e2d'
(即中)。但是我无法编译麻将牌''(它超出了基本多语言平面,因此不能由char表示,所以这并不奇怪)。 - Eponymous经过深入阅读,javadoc表明基于char
参数的Character方法并不支持所有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
,而应该谈论char
数组,因为Unicode字符可以用多个char
表示。另一方面,一个int
可以涵盖所有内容。
在字符串级别上:以下使用的是int而不是char,比如对于中文来说,但对于字符也是合适的。
int cp = "\u041f".codePointAt(0);
String s = new String(Character.toChars(cp));
在native2ascii级别上:
如果您想在\uXXXX和Unicode字符之间进行转换,请使用apache,commons-lang中的StringEscapeUtils
:
String t = StringEscapeUtils.escapeJava(s + "ö");
System.out.println(t);