我需要將Java字符的十六進制代碼生成爲字符串,並在稍後再次解析這些字符串。我發現here語法分析可以如下進行:將Java Char轉換爲Unicode十六進制字符串表示形式,反之亦然
char c = "\u041f".toCharArray()[0];
我希望的東西更優雅像Integer.valueOf()解析。
如何正確生成十六進制Unicode?
我需要將Java字符的十六進制代碼生成爲字符串,並在稍後再次解析這些字符串。我發現here語法分析可以如下進行:將Java Char轉換爲Unicode十六進制字符串表示形式,反之亦然
char c = "\u041f".toCharArray()[0];
我希望的東西更優雅像Integer.valueOf()解析。
如何正確生成十六進制Unicode?
做一些更深入的閱讀後,javadoc中說,基於char
參數不支持所有Unicode值Character方法,但那些服用代碼點(即,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
表示。另一方面,int
涵蓋了這一切。
那麼你說得對你的問題中的字符是正確的,這是Java的破碎,並迫使編碼器在編碼細節級WRT到Unicode補充字符串干擾。 –
這將生成字符的十六進制字符串表示:
char ch = 'ö';
String hex = String.format("%04x", (int) ch);
,這將十六進制字符串轉換回字符:
int hexToInt = Integer.parseInt(hex, 16);
char intToChar = (char)hexToInt;
在串級: 下面的用法不是char,而是int,用於中文,但也適用於字符。
int cp = "\u041f".codePointAt(0);
String s = new String(Character.toChars(cp));
在native2ascii的水平: 如果你想回來,\uXXXX
和Unicode字符之間來回轉換,從阿帕奇使用,公共琅的StringEscapeUtils
:
String t = StringEscapeUtils.escapeJava(s + "ö");
System.out.println(t);
在命令行native2ascii可以在u-escaped和UTF-8之間來回轉換文件。
我發佈了一個答案,但我想我可能會從你想要的東西后退。你能用你想要的輸出例子來澄清一下嗎? – noel
說,對於字符ö,我想'00F6'列在這裏:http://en.wikipedia.org/wiki/List_of_Unicode_characters – JVerstry
好的,那麼我的答案應該工作。 – noel