我怎样才能得到一个Unicode字符的代码?

比方说,我有这个:

char registered = '®'; 

umlaut ,或任何unicode字符。 我怎么能得到它的代码?

只要将其转换为int

 char registered = '®'; int code = (int) registered; 

实际上有一个从charint的隐式转换,所以你不必像上面所做的那样明确地指定它,但是在这种情况下,我会这么做,以便明确你正在做什么。

这将给出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的回答更多解释。