我試圖從utf代碼中創建char字符。我正在從一個文字中讀取這個代碼,這個文件是一個字符映射。所有字符都由其UTF代碼指定。從包含utf代碼的字符串中創建char字符
0020 SPACE
0021感嘆號
0022引號
。
。
。
從文件中讀取代碼後,我最終得到了一個字符串中的代碼。我如何將此代碼(Stirng)轉換爲char?
我試圖從utf代碼中創建char字符。我正在從一個文字中讀取這個代碼,這個文件是一個字符映射。所有字符都由其UTF代碼指定。從包含utf代碼的字符串中創建char字符
0020 SPACE
0021感嘆號
0022引號
。
。
。
從文件中讀取代碼後,我最終得到了一個字符串中的代碼。我如何將此代碼(Stirng)轉換爲char?
的代碼存儲在十六進制,所以我想你想的:
String code = "0021";
char c = (char)Integer.parseInt(code, 16);
System.out.println("Code: " + code + " Character: " + c);
我認爲沒有你的字符代碼超過可以存儲在一個字符,即字符的Basic Multilingual Plane最大值。由於您的數據格式顯示爲填充爲零的最大長度爲4個十六進制數字,因此我假定您需要考慮的所有字符實際上都是在BMP中。
如果不是這樣,您將需要一個不同的解決方案。見Character.toChars(int)
。
使用Integer.parseInt(String, 16)
將其解析爲整數,然後將其轉換爲char。
它看起來像UTF-16。要從這些字節創建字符串,請使用:
new String(byte[]{0x00, 0x21}, "UTF-16")
這會創建一個包含感嘆號的字符串。該字符是charAt(0)。
編輯
可能不是最高效的方法,但它適用於其他的編碼,以及...
編輯
OK,有一個誤解,上面的代碼不是一個解決方案,而是一個關於如何促進String構造函數從特殊編碼中的一系列字節創建String的例子。正如它是一個例子,它看起來是靜態的。這裏是運行時的解決方案(知道尤其是接受的解決方案更適合 - 這一個更一般):
public char decodeUTF16(byte b1, byte b2) {
return decode(new byte[]{b1, b2}).charAt(0);
}
public String decodeUTF16(byte[] bytes) {
return decode(bytes, "UTF-16");
}
public String decode(byte[] bytes, String encoding) {
return new String(bytes, encoding);
}
downvote的任何理由? – 2010-01-22 22:47:39
@Andreas_D:因爲OP希望有一個運行時解決方案,因此您需要編譯時間,並提及並濫用UTF-16。 OP通過ParseInt()函數將其解碼爲int後,它已經具有十六進制的Unicode字符點),它們不需要UTF-16解碼。 'char c =(char)0x0020'另一方面將是一個寶貴的貢獻,我會建議編輯它。 – 2010-01-22 22:55:19
這是一個例子。只是一個例子。 – 2010-01-22 23:06:15
我不明白這個問題。你有「0020」,並想要相應的字符,就是這樣嗎? – 2010-01-22 22:17:42
是的,就是這樣。 – Omar 2010-01-22 22:21:42