在JSP中,使用get提交方式出现乱码时,为什么要使用new String(s.getBytes("iso-8859-1"),"utf-8");?
最近在學JSP,在學習處理get方式提交數據出現亂碼問題的時候,對其中的一個解決方法new String(s.getBytes("iso-8859-1"),"utf-8");產生了疑問,就是為什么要使用s.getBytes("iso-8859-1")?
當時只這樣想的:客戶端向服務器發送一個請求,比如說是一個字符串"請求";之后服務器接收到這個請求,也就是這個字符串,可是這時由于某種原因出現了亂碼!這時為了解決這個問題,使用new String(s.getBytes("iso-8859-1"),"utf-8");解決問題。看到這條語句,我感覺想不通啊,字符使用iso-8859-1編碼取得字節序列,再由utf-8解碼取得字符串,得到的還是亂碼啊!怎么會取得正確的字符呢!!!想不通啊!
之后,通過查找資料,得到了一點想法,代碼如下:
1 public class ThinkIng {
2 public static void main(String[] args) throws Exception {
3 System.out.println(" ------JSP模擬------");
4 System.out.println("客戶端,有一個中文字符的請求(轉換成了字節序列發送),發送至服務器端");
5 String request="請求";
6 byte[] client=request.getBytes();//客戶端的請求的字節序列
7 print(client);
8 System.out.println();//分割用的
9 System.out.println("有一中間件,將發送的字符序列一默認的編碼格式(iso-8859-1)進行解碼");
10 String sever=new String(client,"iso-8859-1");
11 System.out.println(sever);
12 System.out.println("程序猿發現,這邊有問題,中文有亂碼,前來解決!");
13 String debug=new String(sever.getBytes("iso-8859-1"),"gbk");//還原字節序列,使用“gbk”重新進行解碼!
14 System.out.println(debug);
15 System.out.println("問題解決!");
16 }
17 public static void print(byte[] b){//用于顯示字節序列的
18 for(byte b1:b){
19 System.out.print(Integer.toHexString(b1 & 0xff)+" ");
20 }
21 }
22 }
先前沒有想通主要是自己沒注意到:
沒有著重的想為什么會在輸出時出現字符亂碼?
客戶端發送求時,字符轉換成字節序列時的編碼方式是什么樣的?
總的來說,亂碼是由于編碼方式與解碼方式不一致導致的,這一句話沒有理解透!如果當時這樣想既然出現了亂碼,肯定是那邊的編碼格式和解碼格式不一致,就好了!
注:編碼:將字符串轉換成字節序列;解碼:將字節序列轉換成字符串
感謝:http://liguocai2009.iteye.com/blog/1602256這篇文章給我的啟發!
總結
以上是生活随笔為你收集整理的在JSP中,使用get提交方式出现乱码时,为什么要使用new String(s.getBytes("iso-8859-1"),"utf-8");?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自定义Web框架
- 下一篇: Spatial Transformer