javaee中的中文亂碼處理


瀏覽器正常顯示

response.setContentType("text/html;charset='utf-8'")

response.setCharacterEncoding("utf-8");

 

服務器端正常接收

中文亂碼有三種情況

1)表單提交(get方式,post方式):input表單輸入為中文

2)超鏈接(get);鏈接?參數名=值(中文)

3)sendRedict(get) 鏈接?參數名=值(中文)

亂碼產生的根本原因

請求發送時:瀏覽器有默認的編碼,經上述設置之后,是utf-8。

web服務器接收時候,也有一種編碼,由於服務器一般是國外開發的,因此默認的編碼方式一般是iso-8859-1

瀏覽器與服務器的編碼方式不一致,因而產生亂碼

問題解決方法

1,如果是表單提交,方法是post(表單提交應當盡量選擇post)

此時通過http請求體傳遞參數,因為服務器會將對應的http請求頭解析並進一步包裝為request對象,因此利用request.setCharacterEncoding方法,指定web服務器接受端的編碼方式,如request.setCharacterEncoding("utf-8")

2,如果是表單提交,方法是get

此時通過鏈接傳遞參數,針對亂碼情況,可以利用

String value=new String(request.getParameter("參數名").getBytes("iso-8859-1"),"utf-8")來解決

這種情況可以封裝成一個工具類 

package com.bobo.utils;

import java.io.UnsupportedEncodingException;

public class MyTools {
    
    public static String getNewString(String str){
        
        try {
            return new String(str.getBytes("iso-8859-1"),"utf-8");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }

}
亂碼工具類

 3,超鏈接亂碼,sendRedict的亂碼本質上也是get請求,解決方法同2

4,如果是ie6及以下版本,上述方法中涉及到get方法時依然有可能出現亂碼,此時的解決方法是:

對要發送的中文進行編碼

String info=java.net.URLEncoder.encode("你好","utf-8");

response.sendRedict("url路徑?參數名="+info);

第三個文件接收

String info=new String(request.getParameter("參數名").getBytes("iso-8859-1"),"utf-8");

 

補充關於亂碼的相關知識點:

一、當我們下載文件的時候,可能提示框是中文亂碼,此時的解決方法是:

String temp=java.net.URLEncoding.encode("中文文件名","utf-8")

response.setHeader("Content-Disposition","attachment;filename="+temp);

二、request.getRequestDispatcher()之后出現亂碼

對於某一個頁面,在單獨訪問的時候是正常的,可是講過上述語句轉向之后出現亂碼 

 在Servlet中,一般有參數傳遞的話,會設置頁面接收參數和傳遞參數的編碼。即下面兩句: 

 

       request.setCharacterEncoding("UTF-8");
       response.setCharacterEncoding("utf-8"); 

 

       一般情況下,大部分都會想到使用這個,但是這兩句代碼的位置有時卻容易被忽視,我今天就是忽視了這兩句的位置。正確的寫法是,request.setCharacterEncoding("UTF-8");    response.setCharacterEncoding("utf-8");要放在PrintWriter out = response.getWriter();的后面。因為out對象初始化之后,再設置編碼已經沒有任何意義了!所以必須在out對象初始化之前進行編碼的設置。

 

 


免責聲明!

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



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