原文地址为:
String中文字符转码
转载请注明本文地址: 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")来得到正确的中文汉字"中".这样就既保证了遵守协议规定、也支持中文.
转载请注明本文地址: String中文字符转码