Java中有什么办法可以让我获得与任何字符均等的Unicode?例如
假设有一个方法getUnicode(char c)
。呼叫getUnicode('÷')
应该返回\u00f7
。
Answers:
您可以使用以下一种衬里对任何Java字符进行处理:
System.out.println( "\\u" + Integer.toHexString('÷' | 0x10000).substring(1) );
但这仅适用于Unicode 3.0以下的Unicode字符,这就是为什么我建议您可以对任何Java字符都使用它。
由于Java是在Unicode 3.1出现之前进行设计的,因此Java的char原语不足以表示Unicode 3.1及更高版本:不再存在“一个Unicode字符到一个Java char”的映射(而是使用了一种怪异的技巧)。
因此,您实际上必须在这里检查您的要求:是否需要支持Java字符或任何可能的Unicode字符?
String.charAt
现在返回“一半字符”并String.length
返回可以与字符数不同的东西是丑陋的,不是吗?(此处的字符表示Unicode代码点,而不是Java字符)String类应该(且在Unicode 3.1之前)独立于编码问题。
如果您有Java 5,请使用 char c = ...; String s = String.format ("\\u%04x", (int)c);
如果您的来源不是Unicode字符(char
)而是字符串,则必须使用charAt(index)
来将Unicode字符获取到position index
。
请勿使用,codePointAt(index)
因为这将返回24位值(完整Unicode),该值不能仅用4个十六进制数字表示(需要6个数字)。请参阅文档以获取解释。
[编辑]要明确:此答案不使用Unicode,而是Java用于表示Unicode字符(即代理对)的方法,因为char是16位,而Unicode是24位。问题应该是:“如何转换char
为4位数的十六进制数字”,因为它(并非真的)与Unicode有关。
private static String toUnicode(char ch) {
return String.format("\\u%04x", (int) ch);
}
( "\\u" + Integer.toHexString('÷' | 0x10000).substring(1) )
char c = 'a';
String a = Integer.toHexString(c); // gives you---> a = "61"
我在网上找到了这个不错的代码。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Unicode {
public static void main(String[] args) {
System.out.println("Use CTRL+C to quite to program.");
// Create the reader for reading in the text typed in the console.
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
try {
String line = null;
while ((line = bufferedReader.readLine()).length() > 0) {
for (int index = 0; index < line.length(); index++) {
// Convert the integer to a hexadecimal code.
String hexCode = Integer.toHexString(line.codePointAt(index)).toUpperCase();
// but the it must be a four number value.
String hexCodeWithAllLeadingZeros = "0000" + hexCode;
String hexCodeWithLeadingZeros = hexCodeWithAllLeadingZeros.substring(hexCodeWithAllLeadingZeros.length()-4);
System.out.println("\\u" + hexCodeWithLeadingZeros);
}
}
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
}
首先,我了解了char的高端。之后,得到低端。转换HexString中的所有内容并放入前缀。
int hs = (int) c >> 8;
int ls = hs & 0x000F;
String highSide = Integer.toHexString(hs);
String lowSide = Integer.toHexString(ls);
lowSide = Integer.toHexString(hs & 0x00F0);
String hexa = Integer.toHexString( (int) c );
System.out.println(c+" = "+"\\u"+highSide+lowSide+hexa);