Java 如何获取Unicode字符';s代码?

Java 如何获取Unicode字符';s代码?,java,unicode,character,Java,Unicode,Character,假设我有这个: char registered = '®'; 或umlaut,或任何unicode字符。如何获取其代码?只需将其转换为int: char registered = '®'; int code = (int) registered; 事实上,有一个从char到int的隐式转换,因此您不必像我上面所做的那样显式地指定它,但在本例中,我会这样做,以使您的意图变得明显 这将给出UTF-16代码单元,它与基本多语言平面中定义的任何字符的Unicode代码点相同。(在Java中,只有BM

假设我有这个:

char registered = '®';

umlaut
,或任何unicode字符。如何获取其代码?

只需将其转换为
int

char registered = '®';
int code = (int) registered;
事实上,有一个从
char
int
的隐式转换,因此您不必像我上面所做的那样显式地指定它,但在本例中,我会这样做,以使您的意图变得明显

这将给出UTF-16代码单元,它与基本多语言平面中定义的任何字符的Unicode代码点相同。(在Java中,只有BMP字符可以表示为
char
值。)正如Andrzej Doyle的回答所说,如果您希望Unicode代码点来自任意字符串,请使用
Character.codePointAt()


一旦您获得了UTF-16代码单元或Unicode代码点(两者都是整数),您就可以决定如何使用它们了。如果您想要一个字符串表示,您需要准确地决定您想要什么类型的表示。(例如,如果您知道值始终在BMP中,您可能需要一个固定的4位十六进制表示形式,前缀为
U+
,例如
“U+0020”
,表示空间)。但这超出了这个问题的范围,因为我们不知道要求是什么。

更完整,尽管更详细,这样做的方法是使用该方法。这将处理“高代理”字符,这些字符不能由
char
可以表示的范围内的单个整数表示

在您给出的示例中,这并不是绝对必要的-如果(Unicode)字符可以放入单个(Java)
char
(例如
注册的
局部变量),那么它必须位于
\u0000
\uffff
范围内,您就不必担心代理项对。但是,如果您正在从字符串/字符数组中查看可能更高的代码点,那么调用此方法是明智的,以覆盖边缘情况

例如,代替

String input = ...;
char fifthChar = input.charAt(4);
int codePoint = (int)fifthChar;
使用


在这种情况下,不仅代码稍微少了一点,还可以为您处理代理项对的检测。

亲爱的朋友,Jon Skeet说您可以找到字符十进制代码,但它不是unicode中应该提到的字符十六进制代码,所以您应该通过十六进制代码而不是十进制代码来表示字符代码

目前有一个开源工具,提供有关字符或句子的完整信息

因此,最好创建一个解析器,将char作为参数,并将ahexCode作为字符串返回

public static String GetHexCode(char character)
    {
        return String.format("{0:X4}", GetDecimal(character));
    }//end

希望它对Java有所帮助,char在技术上是一个“16位整数”,所以您可以简单地将其转换为int,就可以得到它的代码。 发件人:

char数据类型是单个16位Unicode字符。它有一个 最小值'\u0000'(或0)和最大值'\uffff'(或 包括65535人)

因此,您可以简单地将其转换为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));
对我来说,只有“Integer.toHexString(registered)”符合我的要求:

char registered = '®';
System.out.println("Answer:"+Integer.toHexString(registered));

这个答案将只给出通常在表中显示的字符串表示形式。Jon Skeet的回答解释了更多。

有一个开源库MgntUtils,它有一个实用程序类StringUnicodeDecoder。该类提供了将任何字符串转换为Unicode序列的静态方法,反之亦然。非常简单和有用。要转换字符串,只需执行以下操作:

String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString);
例如,字符串“Hello World”将转换为

“\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064”


它适用于任何语言。以下是文章的链接,该文章解释了有关库的所有te DITAIL:。查找副标题“字符串Unicode转换器”。该库可以作为或从(包括源代码和Javadoc)获取。

//您可以在下面获得unicode

int a='a'; //“a”是要获取其unicode编码的字母或符号

//您可以通过unicode获得下面的符号或字母

System.out.println(“\123”);
//123是您要传输的unicode

@Geo:基本多语言平面中的任何内容,是的。在Java中,不能在单个字符中表示U+FFFF以上的字符。但是字符被有效地定义为UTF-16码点。它适用于
U+FFFF
下面表示Unicode字符的每个
char
,但不适用于每个Unicode字符,因为
char
不能代表所有Unicode字符。根据
char
的来源,您可能需要做一些更复杂的事情(而且确实应该做好准备)。要将其转换为十六进制,请使用
Integer#toHexString()
。如果它不在基本的多语言平面内,该怎么办?@fzzfzz:那么您根本就不需要将其作为单个
char
开始,但是您可以使用
char.Convert.ToUtf32
。它甚至可以与euro character
String.format(“%x”,(int)”€')==0x20ac=='\u20ac'
“因此您应该通过十六进制代码而不是十进制代码来表示字符代码”-这是一个数字。十六进制与十进制仅在将其转换为字符串时才起作用,而问题中根本不需要这一点。您认为发布指向C#的链接以及一些C#代码如何帮助op解决Java问题?正如我在回答中的评论所指出的,这是因为“您想要的方式”就是生成代码的十六进制表示形式——这不是这个问题所要问的。代码本身是一个整数;“如何创建整数的十六进制表示法”是另一回事。(对于Unicode代码点,你还应该考虑你想要多少十六进制数字——你可能想用4作为一个BMP字符,6用于其他,或者总是用6,或者总是一个偶数,例如……)它使你写了什么。是什么让你认为代码定义为整数?对我来说,代码是符号的组合,不一定是数字或整数。你的回答真的很有用,但最后我花了半个小时才发现如何得到答案
String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString);