假设我有这样一个代码:
char registered = '®';
或 umlaut
,或任何 Unicode 字符。我如何获取它的代码?
将其转换为int
即可:
char registered = '®';
int code = (int) registered;
实际上,从char到int有一个隐式转换,所以你不必像我上面那样明确指定它,但在这种情况下,我建议这样做,以便清楚明了你的意图。一种更完整但冗长的方法是使用Character.codePointAt方法。该方法可以处理“高代理项”字符,这些字符不能由单个整数表示,而是需要多个char
表示。
在您提供的示例中,这并非必需 - 如果(Unicode)字符可以容纳在单个(Java)char
中(例如registered
局部变量),那么它必须落在\u0000
到\uffff
范围内,您就不需要担心代理对了。但如果您正在查看来自String/char数组的可能更高代码点,则调用此方法是明智的,以便涵盖边缘情况。
例如,不要使用以下方式:
String input = ...;
char fifthChar = input.charAt(4);
int codePoint = (int)fifthChar;
使用
String input = ...;
int codePoint = Character.codePointAt(input, 4);
这不仅在此情况下减少了一些代码,而且它会为您处理代理对的检测。
在Java中,char本质上是一个"16位整数",所以您可以将其直接强制转换为int类型,这样就可以得到它的代码。
引用自Oracle:
char数据类型是单个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));
String.format("%x", (int) '€') == 0x20ac == '\u20ac'
。 - ATorras有一个开源库MgntUtils,其中有一个实用类StringUnicodeEncoderDecoder。该类提供了将任何字符串转换为Unicode序列的静态方法,非常简单和有用。要转换字符串,只需执行以下操作:
String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString);
char registered = '®';
System.out.println("Answer:"+Integer.toHexString(registered));
这个答案只会给你通常在表格中呈现的字符串表示。Jon Skeet的回答解释得更多。
public static String GetHexCode(char character)
{
return String.format("{0:X4}", GetDecimal(character));
}//end
//以下是获取Unicode的方法
int a = 'a'; // 'a'代表你想要获取其Unicode的字母或符号
//以下是通过Unicode获取字母或符号的方法
System.out.println("\u0123"); //123是你想要转换的Unicode
char
,编码在U+FFFF
以下,但并非所有Unicode字符都适用,因为char
无法表示所有Unicode字符。根据您使用的char
源,您可能需要进行更复杂的操作(并且确实应该为此做好准备)。 - JaakkoKInteger#toHexString()
。 - BalusCchar
开始,而是可以使用char.Convert.ToUtf32
。 - Jon Skeet