JavaWeb:formフォーム提出データ(post、get)中国語文字化けし問題まとめ


Formフォーム提出データ(post、get)中国語文字化けし問題まとめ
一:formフォームはフロントでpost方式でデータを提出する:ブラウザがデータ(仮に「中国」とする)をサーバーに送信する時、データ(「中国」)を0101のバイナリデータにする時、必ずコードテーブルを調べ、ブラウザがどのコードテーブルでホームページを開き、ブラウザがどのコードテーブルでデータを提出する(「中国」)データ(「中国」)がサーバーに到着すると、データ(「中国」)をrequestにカプセル化し、servletでRequestを呼び出すgetParameterメソッドは文字列(「中国」)を返し、メソッド内部で数字を手に入れて文字に変換し、必ずコード表を調べます.requestの設計者は外国人なので、デフォルトではISO 8859-1を調べます.これが要求データが文字化けした根源である.
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         //           
         //          UTF-8
        request.setCharacterEncoding("UTF-8");
        String username = request.getParameter("username");
        //      ,             
        System.out.println(username);
        //               
        response.setCharacterEncoding("UTF-8");//            
        response.setContentType("text/html;charset=UTF-8");
        
        PrintWriter out = response.getWriter();
        out.write(username);
} 

二:formはフロントでget方式でデータを提出します:get方式で提出したデータ(「中国」)は依然としてブラウザがどんなコードテーブルで開いてどんなコードテーブルで送信します.異なるのは、get方式でデータ(「中国」)をコミットした場合、request設定符号化は無効です.UTF-8を設置してもISO 8859-1を調べます.手に入れる(?)、この問題を解決するには、(?)逆にISO 8859-1を調べて、(中国)を手に入れてから、正しいコード表を調べます.
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         //           
         //          UTF-8
         // get       ,request      。     UTF-8     ISO8859-1
        request.setCharacterEncoding("UTF-8");
        String username = request.getParameter("username");
        System.out.println(username);
        
        byte source [] = username.getBytes("iso8859-1");
        username = new String (source,"UTF-8");
        System.out.println(username);
} 

三:提出データ中国語文字化けし問題まとめ:1.コミット方式がpostであれば,文字化けをしないためにはrequestオブジェクトの符号化を設定するだけでよい.注意:クライアントデータがどのようにコミットされているか、requestはどのような符号化に設定すべきか.2.コミット方式がgetの場合、requestオブジェクトを設定する符号化は無効であり、文字化を乱さないようにするには、手動で変換するしかない.
 //     
 String data = "???????";
 data = new String (source,"UTF-8");
 
    
 
 String data = "???????";
 //            
 byte source [] = data.getBytes("iso8859-1");
 //    
 data = new String (data.getBytes("iso8859-1"),"UTF-8");

3.get方式の文字化けしは、サーバ構成を変更することで実現することもできます.Tomactのconfディレクトリの下のserverを変更します.xmlファイル.3.1この方法は、サーバを変更して柔軟性がないため推奨されません.3.2このように設定すると、requestのsetCharacterEncodingはどのような符号化を設定し、コネクタはどのように符号化され、前の変更よりも柔軟であるが、依然として私たちのアプリケーションがサーバにしっかりと依存することになる.推薦もされません.
四:最後:URLアドレスの後ろに中国語のデータがついている場合、必ずURLコードを通してください.フォームに提出されたパラメータは中国語のデータがあり、ブラウザは自動的にコードしてくれるが、リンクを通じて直接中国語のパラメータを持っている場合、ブラウザはコードしてくれない.Encode(,“UTF-8”)が先に符号化されます.