在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字符吗?
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.
小智 12
private static String toUnicode(char ch) {
return String.format("\\u%04x", (int) ch);
}
Run Code Online (Sandbox Code Playgroud)
char c = 'a';
String a = Integer.toHexString(c); // gives you---> a = "61"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
141214 次 |
最近记录: |