1. 程式人生 > >JAVA方法 字串與unicode的相互轉換

JAVA方法 字串與unicode的相互轉換

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                unicode編碼簡而言之就是將每一個字元用16位2進位制數標識。但是通常都用4位的16進位制數標識。 
例如: 
1)中文字串"你好"的unicode碼為:\u60\u597d; 

2)英文字串"ab"的unicode碼為:\u0061\u0062; 
其中\u是標識unicode碼用的,後面的4位16進位制數則是對應字元的unicode碼。 

unicode碼在J2EE專案中應用廣泛,java對unicode碼提供了很好的支援。例如國際化,則是unicode的經典運用。 
那麼unicode的編碼規則具體是什麼,如何用程式實現? 

1、unicode編碼規則  

   unicode碼對每一個字元用4位16進位制數表示。具體規則是:將一個字元(char)的高8位與低8位分別取出,轉化為16進位制數, 

   如果轉化的16進位制數的長度不足2位,則在其後補0,然後將高、低8位轉成的16進位制字串拼接起來並在前面補上"\u" 即可。 
   
2、轉碼程式  

1)字串轉unicode  

/** 
* 將字串轉成unicode 
* @param str 待轉字串 
* @return unicode字串 
*/ 
public String convert(String str) 


str = (str == null ? "" : str); 
String tmp; 
StringBuffer sb = new StringBuffer(1000); 
char c; 
int i, j; 
sb.setLength(0); 
for (i = 0; i < str.length(); i++) 

c = str.charAt(i); 
sb.append("\\u"); 
j = (c >>>8); //取出高8位 
tmp = Integer.toHexString(j); 
if (tmp.length() == 1) 
sb.append("0"); 
sb.append(tmp); 
j = (c & 0xFF); //取出低8位 
tmp = Integer.toHexString(j); 
if (tmp.length() == 1) 
sb.append("0"); 
sb.append(tmp); 


return (new String(sb)); 



2)unicode轉成字串,與上述過程反向操作即可  
/** 
* 將unicode 字串 
* @param str 待轉字串 
* @return 普通字串 
*/ 
public String revert(String str) 

str = (str == null ? "" : str); 
if (str.indexOf("\\u") == -1)//如果不是unicode碼則原樣返回 
return str; 

StringBuffer sb = new StringBuffer(1000); 

for (int i = 0; i < str.length() - 6;) 

String strTemp = str.substring(i, i + 6); 
String value = strTemp.substring(2); 
int c = 0; 
for (int j = 0; j < value.length(); j++) 

char tempChar = value.charAt(j); 
int t = 0; 
switch (tempChar) 

case 'a': 
t = 10; 
break; 
case 'b': 
t = 11; 
break; 
case 'c': 
t = 12; 
break; 
case 'd': 
t = 13; 
break; 
case 'e': 
t = 14; 
break; 
case 'f': 
t = 15; 
break; 
default: 
t = tempChar - 48; 
break; 


c += t * ((int) Math.pow(16, (value.length() - j - 1))); 

sb.append((char) c); 
i = i + 6; 

return sb.toString(); 

}


// Method 2 :

java環境安裝後jdk的bin目錄有個native2ascii.exe可以實現類似的功能,但是通過java程式碼也可以實現同樣的功能。字串轉換unicode java方法程式碼片段:複製程式碼 程式碼如下:/** * 字串轉換unicode */public static String string2Unicode(String string) {     StringBuffer unicode = new StringBuffer();     for (int i = 0; i < string.length(); i++) {         // 取出每一個字元        char c = string.charAt(i);         // 轉換為unicode        unicode.append("\\u" + Integer.toHexString(c));    }     return unicode.toString();}unicode轉換字串java方法程式碼片段:複製程式碼 程式碼如下:/** * unicode 轉字串 */public static String unicode2String(String unicode) {     StringBuffer string = new StringBuffer();     String[] hex = unicode.split("\\\\u");     for (int i = 1; i < hex.length; i++) {         // 轉換出每一個程式碼點        int data = Integer.parseInt(hex[i], 16);         // 追加成string        string.append((char) data);    }     return string.toString();}測試java程式碼片段:複製程式碼 程式碼如下:public static void main(String[] args) {    String test = "最程式碼網站地址:www.zuidaima.com";     String unicode = string2Unicode(test);         String string = unicode2String(unicode) ;         System.out.println(unicode);         System.out.println(string); }輸出結果:\u6700\u4ee3\u7801\u7f51\u7ad9\u5730\u5740\u3a\u77\u77\u77\u2e\u7a\u75\u69\u64\u61\u69\u6d\u61\u2e\u63\u6f\u6d


           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述