String中文字符轉碼


如何使用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")來得到正確的中文漢字"中".這樣就既保證了遵守協議規定、也支持中文.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM