假设我有这个:
char registered = '®';
或umlaut
,或任何unicode字符。我怎么能得到它的代码?
答案 0 :(得分:103)
只需将其转换为int
:
char registered = '®';
int code = (int) registered;
实际上存在从char
到int
的隐式转换,因此您不必像上面那样明确指定它,但在这种情况下我会这样做以使其显而易见你想做什么。
这将给出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