2010-12-01 55 views
10

如何獲得Java中char的UTF8代碼? 我有字符「A」,我想價值97 我有字符「e」和我想的價值233在java中獲取char值

這裏是more values

表我試圖Character.getNumericValue(a)但對於它給我10而不是97,任何想法爲什麼?

這似乎很基本,但任何幫助,將不勝感激!

+0

這是如何關係到UTF-8(http://en.wikipedia.org/wiki/UTF -8)? UTF-8中的'é'是'0xC3 0xA9'。 – axtavt 2010-12-01 21:31:09

回答

9

char實際上是含有的Unicode值一個數值類型(UTF-16,確切的 - 你需要 char s到表示BMP之外的字符)的字符。你可以用它做任何事情,你可以用int來做。

Character.getNumericValue()試圖將該字符解釋爲數字。

4

這將產生良好的效果:

int a = 'a'; 
System.out.println(a); // outputs 97 

同樣:

System.out.println((int)'é'); 

打印出233

4

那些「UTF-8」代碼不是這樣的。它們實際上只是Unicode值,按照Unicode code charts

所以'é'實際上是U + 00E9 - 在UTF-8中它將由兩個字節{0xc3,0xa9}表示。

我們得到的Unicode值 - 或者更精確的UTF-16值,因爲這就是Java的內部使用 - 你只需要值轉換爲整數:

char c = '\u00e9'; // c is now e-acute 
int i = c; // i is now 233 
+0

謝謝你的例子! – Nick 2010-12-01 21:47:07

1

你的問題不清楚。您是否希望爲特定字符(這是您提供的示例)使用Unicode代碼點,還是要將Unicode代碼點轉換爲UTF-8字節序列?

如果是前者,那麼我在http://www.unicode.org/

建議代碼圖表如果是後者,那麼下面的程序將做到這一點:

public class Foo 
{ 
    public static void main(String[] argv) 
    throws Exception 
    { 
     char c = '\u00E9'; 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     OutputStreamWriter out = new OutputStreamWriter(bos, "UTF-8"); 
     out.write(c); 
     out.flush(); 
     byte[] bytes = bos.toByteArray(); 
     for (int ii = 0 ; ii < bytes.length ; ii++) 
     System.out.println(bytes[ii] & 0xFF); 
    } 
} 

(有也是一個在線的Unicode到UTF-8頁,但我沒有在這臺機器上的URL)

8

您可以使用java.lang.String的codePointAt(int index)方法。這裏有一個例子:

"a".codePointAt(0) --> 97 
"é".codePointAt(0) --> 233 

如果你想避免不必要地創建的字符串,下面的工作以及和可用於字符數組:

Character.codePointAt(new char[] {'a'},0) 
+0

我在這裏結束,因爲我不能相信有沒有名爲codePoint的方法需要一個字符:Character.codePoint('a')或非靜態的c.codePoint() – user1708042 2016-05-02 15:32:02

2

我的方法來做到這一點是這樣的:

char c = 'c'; 
int i = Character.codePointAt(String.valueOf(c), 0); 
// testing 
System.out.println(String.format("%c -> %d", c, i)); // c -> 99 
0

有一個開源庫MgntUtils,它有一個Utility類StringUnicodeEncoderDecoder。該類提供了將任何字符串轉換爲Unicode序列的靜態方法,反之亦然。非常簡單而有用。轉換字符串你只是做:

String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString); 

例如一個字符串 「Hello World」 將被轉換成

「\ u0048 \ u0065 \ u006c \ u006c \ u006f \ u0020 \ u0057 \ u006f \ u0072 \ u006c \ u0064「

它適用於任何語言。下面是鏈接到文章的鏈接,該鏈接解釋了關於該庫的所有技巧:MgntUtils。查找字幕「字符串Unicode轉換器」。文章給你鏈接到Maven Central,你可以獲得工件和github,你可以在那裏獲得項目本身。該庫附有精心編寫的javadoc和源代碼。

0

您可以創建一個簡單的循環列出所有可用這樣的UTF-8字符:

public class UTF8Characters { 
    public static void main(String[] args) { 
     for (int i = 12; i <= 999; i++) { 
      System.out.println(i +" - "+ (char)i); 
     } 
    } 
}