如何使用String構造方法和String.getBytes()做好中文字符轉碼
1 @Test 2 public void test() { 3 String testStr = "中"; 4 try { 5 // 得到指定編碼的字節數組 字符串--->字節數組 6 byte[] t_iso = testStr.getBytes("ISO8859-1"); 7 byte[] t_gbk = testStr.getBytes("GBK"); 8 byte[] t_utf8 = testStr.getBytes("UTF-8"); 9 System.out.println("使用ISO解碼..." + t_iso.length); 10 System.out.println("使用GBK解碼..." + t_gbk.length); 11 System.out.println("使用UTF8解碼..." + t_utf8.length); 12 // 解碼后在組裝 13 String ut_iso = new String(t_iso, "ISO8859-1"); 14 String ut_gbk = new String(t_gbk, "GBK"); 15 String ut_utf8 = new String(t_utf8, "UTF-8"); 16 System.out.println("使用ISO解碼后再用ISO組裝..." + ut_iso); 17 System.out.println("使用GBK解碼后再用GBK組裝..." + ut_gbk); 18 System.out.println("使用UTF8解碼后再用UTF8組裝..." + ut_utf8); 19 // 有時候要求必須是iso字符編碼類型 20 // 可以先用GBK/UTF8編碼后,用ISO8859-1組裝成字符串,解碼時逆向即可獲得正確中文字符 21 String t_utf8Toiso = new String(t_utf8, "ISO8859-1"); 22 // 將iso編碼的字符串進行還原 23 String ut_utf8Toiso = new String(t_utf8Toiso.getBytes("ISO8859-1"),"UTF-8"); 25 System.out.println("使用ISO組裝utf8編碼字符..." + t_utf8Toiso); 26 System.out.println("使用ISO解碼utf8編碼字符..." + ut_utf8Toiso); 27 } catch (UnsupportedEncodingException e) { 28 e.printStackTrace(); 29 } 30 }
為什么使用ISO8859-1編碼再組合之后,無法還原"中"字呢?
其實原因很簡單,因為ISO8859-1編碼的編碼表中,沒有包含漢字字符,當然也就無法通過"中".getBytes("ISO8859-1");來得到正確的"中"字在ISO8859-1中的編碼值了,所以再通過new String()來還原就無從談起了.
有時候,為了讓中文字符適應某些特殊要求(如http header頭要求其內容必須為iso8859-1編碼),可能會通過將中文字符按照字節方式來編碼的情況,如:
String s_iso88591 = new String("中".getBytes("UTF-8"),"ISO8859-1"),這樣得到的s_iso8859-1字符串實際是三個在ISO8859-1中的字符,在將這些字符傳遞到目的地后,目的地程序再通過相反的方式String s_utf8 = new String(s_iso88591.getBytes("ISO8859-1"),"UTF-8")來得到正確的中文漢字"中".這樣就既保證了遵守協議規定、也支持中文.