获取角色的unicode值

Sau*_*abh 67 java unicode

在Java中是否有任何方法可以使Unicode与任何字符等效?例如

假设一种方法getUnicode(char c).getUnicode('÷')应该返回一个电话\u00f7.

Syn*_*r0r 60

你可以在这里使用one liner执行任何Java char:

System.out.println( "\\u" + Integer.toHexString('÷' | 0x10000).substring(1) );
Run Code Online (Sandbox Code Playgroud)

但它只适用于Unicode 3.0以前的Unicode字符,这就是为什么我为你准备任何Java char的原因.

因为Java是在Unicode 3.1出现之前设计的,因此Java的char原语不足以表示Unicode 3.1及以上:不再有"一个Unicode字符到一个Java char"映射(而是使用了一个怪异的hack).

所以你真的必须在这里检查你的要求:你需要支持Java char或任何可能的Unicode字符吗?

  • "怪异的黑客"是UTF-16,它被广泛使用.它可能并不理想,但它比仅支持UCS-2更好理解和更好. (4认同)

Aar*_*lla 33

如果您有Java 5,请使用 char c = ...; String s = String.format ("\\u%04x", (int)c);

如果源不是Unicode字符(char)而是字符串,则必须使用此字符串charAt(index)来获取Unicode字符index.

不要使用,codePointAt(index)因为它将返回24位值(完整的Unicode),不能用4个十六进制数字表示(它需要6).请参阅文档以获取解释.

[编辑]为了说清楚:这个答案不使用Unicode,而是Java用来表示Unicode字符(即代理对)的方法,因为char是16位,Unicode是24位.问题应该是:"如何转换char为4位十六进制数",因为它不是(真的)关于Unicode.

  • @Aaron Digulla:认为charAt(...)返回Unicode字符是一个常见的错误.它没有.如果您的String由Unicode 3.0/BMP字符组成,则charAt(...)仅返回Unicode字符.我不同意他不应该使用codePointAt.他应该使用codePointAt和一种能够编码BMP之外的字符的方法. (2认同)

小智 12

private static String toUnicode(char ch) {
    return String.format("\\u%04x", (int) ch);
}
Run Code Online (Sandbox Code Playgroud)

  • 复制3年前的现有答案. (7认同)
  • 然而,给出了更清晰的答案然后最好的答案我的意思是这到底是什么`("\\u" + Integer.toHexString('÷' | 0x10000).substring(1) )` (3认同)

Dee*_*rma 6

char c = 'a';
String a = Integer.toHexString(c); // gives you---> a = "61"
Run Code Online (Sandbox Code Playgroud)