如何获取Unicode字符代码?

时间:2010-01-05 14:18:51

标签: java unicode character

假设我有这个:

char registered = '®';

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

7 个答案:

答案 0 :(得分:103)

只需将其转换为int

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

实际上存在从charint的隐式转换,因此您不必像上面那样明确指定它,但在这种情况下我会这样做以使其显而易见你想做什么。

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

一旦你获得了UTF-16代码单元或Unicode代码点,但是它们是整数,由你自己做什么。如果您需要字符串表示,则需要准确确定所需的表示形式。 (例如,如果您知道该值将始终位于BMP中,则可能需要一个前缀为U+的固定4位十六进制表示,例如"U+0020"表示空间。)这超出了此范围但问题是,因为我们不知道要求是什么。

答案 1 :(得分:33)

更完整但更冗长的方法是使用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);

此实例中的代码不仅略少,而且还可以为您处理代理对的检测。

答案 2 :(得分:7)

在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));

答案 3 :(得分:0)

亲爱的朋友,Jon Skeet说你可以找到字符十进制代码,但它不是字符十六进制代码,因为它应该在unicode中提及,所以你应该通过HexCode而不是在Deciaml中表示字符代码。

http://unicode.codeplex.com有一个开源工具,提供有关characer或sentece的完整信息。

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

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

希望有所帮助

答案 4 :(得分:0)

对我来说,只有“Integer.toHexString(已注册)”以我想要的方式工作:

Child.prototype.__proto__ = EventEmitter.prototype;
Child.prototype = Object.create(EventEmitter.prototype)

此答案仅为您提供表格中通常显示的字符串表示形式。 Jon Skeet的答案解释得更多。

答案 5 :(得分:0)

有一个开源库MgntUtils,它有一个Utility类StringUnicodeEncoderDecoder。该类提供静态方法,将任何String转换为Unicode序列,反之亦然。非常简单实用。要转换字符串,您只需:

String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString);

例如,字符串“Hello World”将转换为

“\ u0048 \ u0065 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006

适用于任何语言。以下是解释有关库的所有技术的文章的链接:MgntUtils。查找副标题“String Unicode converter”。本文为您提供Maven Central的链接,您可以在其中获取工件和github,您可以在其中获得项目本身。该库附带编写良好的javadoc和源代码。

答案 6 :(得分:-1)

//下面可以得到unicode

int a = 'a'; // 'a' 是你想得到它的 unicode 的字母或符号

//您可以通过其unicode获取符号或字母下方

System.out.println("\123"); //123是你要传输的unicode