如何獲得Java中char的UTF8代碼? 我有字符「A」,我想價值97 我有字符「e」和我想的價值233在java中獲取char值
這裏是more values
表我試圖Character.getNumericValue(a)
但對於它給我10而不是97,任何想法爲什麼?
這似乎很基本,但任何幫助,將不勝感激!
如何獲得Java中char的UTF8代碼? 我有字符「A」,我想價值97 我有字符「e」和我想的價值233在java中獲取char值
這裏是more values
表我試圖Character.getNumericValue(a)
但對於它給我10而不是97,任何想法爲什麼?
這似乎很基本,但任何幫助,將不勝感激!
char
實際上是含有的Unicode值一個數值類型(UTF-16,確切的 - 你需要 char
s到表示BMP之外的字符)的字符。你可以用它做任何事情,你可以用int
來做。
Character.getNumericValue()
試圖將該字符解釋爲數字。
這將產生良好的效果:
int a = 'a';
System.out.println(a); // outputs 97
同樣:
System.out.println((int)'é');
打印出233
。
那些「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
謝謝你的例子! – Nick 2010-12-01 21:47:07
你的問題不清楚。您是否希望爲特定字符(這是您提供的示例)使用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)
您可以使用java.lang.String的codePointAt(int index)方法。這裏有一個例子:
"a".codePointAt(0) --> 97
"é".codePointAt(0) --> 233
如果你想避免不必要地創建的字符串,下面的工作以及和可用於字符數組:
Character.codePointAt(new char[] {'a'},0)
我在這裏結束,因爲我不能相信有沒有名爲codePoint的方法需要一個字符:Character.codePoint('a')或非靜態的c.codePoint() – user1708042 2016-05-02 15:32:02
我的方法來做到這一點是這樣的:
char c = 'c';
int i = Character.codePointAt(String.valueOf(c), 0);
// testing
System.out.println(String.format("%c -> %d", c, i)); // c -> 99
有一個開源庫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和源代碼。
您可以創建一個簡單的循環列出所有可用這樣的UTF-8字符:
public class UTF8Characters {
public static void main(String[] args) {
for (int i = 12; i <= 999; i++) {
System.out.println(i +" - "+ (char)i);
}
}
}
這是如何關係到UTF-8(http://en.wikipedia.org/wiki/UTF -8)? UTF-8中的'é'是'0xC3 0xA9'。 – axtavt 2010-12-01 21:31:09