我怎样才能得到一个Unicode字符的代码?
比方说,我有这个:
char registered = '®';
或umlaut
,或任何unicode字符。 我怎么能得到它的代码?
只要将其转换为int
:
char registered = '®'; int code = (int) registered;
实际上有一个从char
到int
的隐式转换,所以你不必像上面所做的那样明确地指定它,但是在这种情况下,我会这么做,以便明确你正在做什么。
这将给出UTF-16代码单元 – 这与基本多语言平面中定义的任何字符的Unicode代码点相同。 (只有BMP字符可以表示为Java中的char
值。)正如Andrzej Doyle的回答所说,如果你想要一个任意string的Unicode码点,使用Character.codePointAt()
。
一旦获得了UTF-16代码单元或Unicode代码点,但这些代码点是整数,则取决于您如何使用它们。 如果你想要一个string表示,你需要确定你想要的表示forms。 (例如,如果您知道该值始终位于BMP中,则可能需要一个固定的4位hex表示,前缀为U+
,例如"U+0020"
表示空间)。这超出了这个问题的范围,我们不知道要求是什么。
一个更完整的,尽pipe更详细的方法是使用Character.codePointAt方法。 这将处理'高代理'字符,这是不能由一个char
可以表示范围内的单个整数表示。
在你给出的例子中,这不是绝对必要的 – 如果(Unicode)字符可以放在单个(Java) char
(例如registered
局部variables)中,那么它必须落在\u0000
到\uffff
范围内,你不需要担心代理对。 但是,如果你正在查看可能更高的代码点,从一个string/字符数组中,然后调用这个方法是明智的,以涵盖边缘情况。
例如,而不是
String input = ...; char fifthChar = input.charAt(4); int codePoint = (int)fifthChar;
使用
String input = ...; int codePoint = Character.codePointAt(input, 4);
这个实例中的代码不仅稍less,而且还会处理代理对的检测。
在Java中,字符在技术上是一个“16位整数”,所以你可以简单地把它转换为int,你会得到它的代码。 来自Oracle :
char数据types是一个单一的16位Unicode字符。 它具有最小值“\ u0000”(或0)和最大值“\ uffff”(或65,535)。
所以你可以简单地把它转换为int。
char registered = '®'; System.out.println(String.format("This is an int-code: %d", (int) registered)); System.out.println(String.format("And this is an hexa code: %x", (int) registered));
亲爱的朋友,Jon Skeet说,你可以find字符十进制代码,但它不是字符hex代码,因为它应该在Unicode提及,所以你应该代表字符代码通过HexCode不在Deciaml。
在http://unicode.codeplex.com有一个开放源代码的工具,它提供了关于characer或sentece的完整信息。;
所以最好创build一个parsing器,将char作为参数,并以string的forms返回ahexCode
public static String GetHexCode(char character) { return String.format("{0:X4}", GetDecimal(character)); }//end
希望它有帮助
对我来说,只有“Integer.toHexString(registered)”按我想要的方式工作:
char registered = '®'; System.out.println("Answer:"+Integer.toHexString(registered));
这个答案只会给你通常在表格中呈现的string表示。 Jon Skeet的回答更多解释。