2013年8月13日 星期二

[ Java 代碼範本 ] 使用 Java 轉換 字串/Unicode

Preface: 
最近專案處理需要用到將字串轉為對應 Unicode 的 Hex String. 下面的代碼可以提供參考. 

Sample Code: 
  1. package test;  
  2.   
  3. import flib.util.HexByteKit;  
  4.   
  5. public class CharacterSetToolkit {    
  6.     public static String StrToUnicode2(String str) throws Exception  
  7.     {  
  8.         StringBuffer outHexStrBuf = new StringBuffer();  
  9.         for(char c:str.toCharArray())  
  10.         {  
  11.             outHexStrBuf.append("\\u");  
  12.             String hexStr = Integer.toHexString(c);           
  13.             for(int i=0; i<(4-hexStr.length()); i++) outHexStrBuf.append("0");  
  14.             outHexStrBuf.append(hexStr);              
  15.         }  
  16.         return outHexStrBuf.toString();  
  17.     }  
  18.       
  19.     public static String StrToUnicode1(String str) throws Exception  
  20.     {  
  21.         StringBuffer outHexStrBuf = new StringBuffer();  
  22.         for(int i=0; i
  23.         {  
  24.             String c = str.substring(i, i+1);  
  25.             byte bytes[]  = c.getBytes("Unicode");   
  26.             outHexStrBuf.append(String.format("\\u%s", HexByteKit.Byte2Hex(bytes).substring(48))); // Trim BOM:0xFEFF  
  27.         }  
  28.           
  29.           
  30.         return outHexStrBuf.toString();  
  31.     }  
  32.       
  33.     public static String UnicodeToStr(String unicodeStr) throws Exception  
  34.     {  
  35.         StringBuffer outStrBuf = new StringBuffer();  
  36.         String uCodes[] = unicodeStr.trim().split("\\\\u");       
  37.         for(String uc:uCodes)  
  38.         {  
  39.             if(uc.trim().isEmpty()) continue;  
  40.             byte bs[] = HexByteKit.Hex2Byte(uc.trim());  
  41.             if(bs!=null)  
  42.             {  
  43.                 String str = new String(bs, "Unicode");               
  44.                 outStrBuf.append(str);  
  45.             }  
  46.             else System.err.printf("Illegal uc=%s\n", uc);  
  47.         }  
  48.           
  49.         return outStrBuf.toString();  
  50.     }  
  51.       
  52.     public static void main(String args[]) throws Exception  
  53.     {  
  54.         String str = "abc繁體简体中文ABC!@#$";  
  55.         String u1 = StrToUnicode1(str);  
  56.         String u2 = StrToUnicode2(str);  
  57.         System.out.printf("Before Str='%s'\n", str);  
  58.         System.out.printf("U1=%s\nU2=%s\n", u1, u2);  
  59.         System.out.printf("After  Str='%s'\n", UnicodeToStr(u1));  
  60.     }  
  61. }  
上面代碼提供兩種方式 (方法 StrToUnicode1 與 StrToUnicode2) 轉換字串成對應 unicode 的 hex string; 而從 unicode hex string 轉回字串就很直覺了(UnicodeToStr). 執行結果如下: 
Before Str='abc繁體简体中文ABC!@#$'
U1=\u0061\u0062\u0063\u7E41\u9AD4\u7B80\u4F53\u4E2D\u6587\u0041\u0042\u0043\u0021\u0040\u0023\u0024
U2=\u0061\u0062\u0063\u7e41\u9ad4\u7b80\u4f53\u4e2d\u6587\u0041\u0042\u0043\u0021\u0040\u0023\u0024
After Str='abc繁體简体中文ABC!@#$'

另外在代碼中有使用到類別 HexByteKit 進行 hex string 到 byte array 與 byte array 到 hex string 的轉換, 該類別屬於一個我成立在 code.google.com 的專案 flib

Supplement: 
線上Unicode 編碼轉換工具 
Baidu 文庫: java中文转换Unicode编码 
digdata.me: Java中文与unicode互转

3 則留言:

  1. 不管又沒有成功~~~謝板大~~

    回覆刪除
    回覆
    1. Try ZHConverter, 目前我都是使用這個工具做 簡繁 轉換:
      http://www.lai18.com/content/8790068.html

      刪除
    2. 原來還可以做繁簡轉換阿~~

      刪除

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...