Geo*_*Geo 63 java unicode character
假设我有这个:
char registered = '®';
Run Code Online (Sandbox Code Playgroud)
或者umlaut
,或者任何unicode字符.我怎么能得到它的代码?
Jon*_*eet 105
只需将其转换为int
:
char registered = '®';
int code = (int) registered;
Run Code Online (Sandbox Code Playgroud)
实际上有一个隐式转换char
,int
所以你不必像我上面那样明确地指定它,但在这种情况下我会这样做,以明确你想要做的事情.
这将给出UTF-16代码单元 - 与基本多语言平面中定义的任何字符的Unicode代码点相同.(并且只有BMP字符可以表示为char
Java中的值.)正如Andrzej Doyle的回答所说,如果您希望Unicode代码点来自任意字符串,请使用Character.codePointAt()
.
一旦你获得了UTF-16代码单元或Unicode代码点,但是它们是整数,由你自己做什么.如果你想要一个字符串表示,你需要决定什么样的你想要表示的.(例如,如果您知道该值将始终在BMP中,您可能需要一个固定的4位十六进制表示U+
,例如"U+0020"
空格.)这超出了本问题的范围,因为我们不知道是什么要求是.
And*_*yle 34
更完整但更冗长的方法是使用Character.codePointAt方法.这将处理'高代理'字符,这些字符不能由a表示的范围内的单个整数char
表示.
在这个例子中,你已经给这不是绝对必要的-如果(Unicode)的字符可以容纳一个(Java)的内部char
(如registered
局部变量),那么它必须落在内\u0000
到\uffff
范围,您将不再需要担心代理对.但是如果你在String/char数组中查看可能更高的代码点,那么调用这个方法是明智的,以便覆盖边缘情况.
例如,而不是
String input = ...;
char fifthChar = input.charAt(4);
int codePoint = (int)fifthChar;
Run Code Online (Sandbox Code Playgroud)
使用
String input = ...;
int codePoint = Character.codePointAt(input, 4);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这不仅仅是稍微减少的代码,而且它将为您处理代理对的检测.
在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));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
123139 次 |
最近记录: |