簡體   English   中英

在Java中獲取char值

[英]get char value in java

如何在Java中獲取char的UTF8代碼? 我有字符'a',我想要值97我有字符'é',我想要值233

這是更多值的表

我嘗試過Character.getNumericValue(a)但是對於a它給了我10個而不是97個,為什么?

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

char實際上是包含char的unicode值(准確地說是UTF-16-您需要兩個 char表示BMP之外的字符)的數字類型。 您可以使用int來完成所有操作。

Character.getNumericValue()嘗試將字符解釋為數字。

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

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

如果要避免不必要地創建字符串,則以下內容也可以工作,並且可以用於char數組:

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

這些“ UTF-8”代碼並非如此。 根據Unicode代碼圖表 ,它們實際上只是Unicode值。

因此,“é”實際上是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

這樣會產生良好的結果:

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

同樣地:

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

打印233

請注意,第一個示例僅適用於標准和擴展ASCII字符集中包含的字符。 第二個適用於所有Unicode字符。 您可以通過將char乘以1來獲得相同的結果。System.out.println(1 *'é');

我的方法是這樣的:

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

您的問題不清楚。 您是否想要特定字符的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到UTF8的頁面,但此機器上沒有URL)

您可以創建一個簡單的循環以列出所有可用的UTF-8字符,如下所示:

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

有一個開源庫MgntUtils,它具有實用程序類StringUnicodeEncoderDecoder。 該類提供了靜態方法,可以將任何String轉換為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和源代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM