iT邦幫忙

DAY 28
5

實戰 Java SE 7 系列 第 28

Java 與 Unicode

Java 打從出生開始,就支援 Unicode,一路從 1.1 版,直到 Java SE 7 支援 6.0 版。除了能顯示、處理 Unicode 字元之外,甚至連程式碼都能用非英文來寫,例如第八天的 Fruit 類例,我們就是用中文來命名變數的。那我們該如何得知一個字元的 Unicode 碼呢?
如果你想查繁體中文 Unicode 字碼的話,可以上一個叫 全字庫 的網站,用注音或其它方式輸入中文字後,它會顯示它的 Unicode 碼。

但其實 JDK 本身就有一個工具程式讓你來查詢 Unicode 碼,只要你安裝好 JDK 後,就會順便安裝這個工具程式,它的名稱叫 native2ascii。最簡單的使用方式是,打開終端機,輸入 native2ascii ,然後就可以輸入文字,按下 enter 鍵後,就會顯示字碼,不想查詢了,就按 CTRL + D 結束程式。

完整的使用方式,請參考 Oracle 官網上的 說明

我們也可以直接寫 Java 的程式來處理,因為 Java 本身不論處理什麼字元,都是以 Unicode 來處理,在 Java 裡,字元的型別是 char ,它等同於 int 型別。在 Java 程式裡,表示一個 char 是用單引號(') 來把字元包起來,例如:'幫',所以我們只需要把字元強迫轉型成 int 型別,就可以得到它的 Unicode 碼了,請看範例程式:

package idv.jacky.ironman4.day28;
 
public class Day28Example1 {
 
 public static void main(String[] args) {
 System.out.println((int)'幫');
 System.out.println(Integer.toHexString(24171));
 System.out.println(Integer.toHexString('幫'));
 System.out.println("iT \u90A6 \u5e6b \u5fd9");
 }
 
}

執行結果:

程式第6行就是我剛剛說的,直接把 char 轉型成 int,就得到該字元的 Unicode 碼,但它是十進位,我們可以用之前學過的 Integer.toHexString 方法來轉成16進位格式。Java 程式碼裡要用 Unicode 碼來表示一個字元時,得用 [b] \uxxxx [\b] 這種格式來表示,[b]\u[\b]就是告訴 Java 說,接下來兩組的16進位數字是一個 Unicode 的字元。例如第9行的 [b]\u5e6b[\b] 就是[b]幫[\b] 這個字元在 Java 程式碼裡表現的方式。

我們自己也可以寫出像 native2ascii 那樣的轉碼工具程式:

package idv.jacky.ironman4.day28;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Day28Example2 {

	public static void main(String[] args) {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        
        while(true) {
	        try {
	        	System.out.print("請輸入文字:");
	        	
	            String character = in.readLine();
	            char[] ch = character.toCharArray();
	            StringBuilder sb = new StringBuilder(ch.length);
                for(int i : ch)
                    sb.append(Integer.toHexString(i))
                      .append(" ");
                System.out.printf("%s 的 Unicode 編碼是: %s%n", character, sb.toString());
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
        }
	}
}

從命令列上輸入一行字串,相信大家都很熟悉了。得到所輸入的字茨後,我們把它轉換成 char 陣列(第16行),然後針對陣列裡的每個 char 去轉換它,這樣就是一個簡易的轉碼工具了。


上一篇
Unicode 6.0 簡介
下一篇
JDBC 4.1
系列文
實戰 Java SE 7 31

尚未有邦友留言

立即登入留言