程式扎記: [ Java 代碼範本 ] 使用 Java 轉換 字串/Unicode

標籤

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互转

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!