JavaWeb:formフォーム提出データ(post、get)中国語文字化けし問題まとめ
3341 ワード
Formフォーム提出データ(post、get)中国語文字化けし問題まとめ
一:formフォームはフロントでpost方式でデータを提出する:ブラウザがデータ(仮に「中国」とする)をサーバーに送信する時、データ(「中国」)を0101のバイナリデータにする時、必ずコードテーブルを調べ、ブラウザがどのコードテーブルでホームページを開き、ブラウザがどのコードテーブルでデータを提出する(「中国」)データ(「中国」)がサーバーに到着すると、データ(「中国」)をrequestにカプセル化し、servletでRequestを呼び出すgetParameterメソッドは文字列(「中国」)を返し、メソッド内部で数字を手に入れて文字に変換し、必ずコード表を調べます.requestの設計者は外国人なので、デフォルトではISO 8859-1を調べます.これが要求データが文字化けした根源である.
二:formはフロントでget方式でデータを提出します:get方式で提出したデータ(「中国」)は依然としてブラウザがどんなコードテーブルで開いてどんなコードテーブルで送信します.異なるのは、get方式でデータ(「中国」)をコミットした場合、request設定符号化は無効です.UTF-8を設置してもISO 8859-1を調べます.手に入れる(?)、この問題を解決するには、(?)逆にISO 8859-1を調べて、(中国)を手に入れてから、正しいコード表を調べます.
三:提出データ中国語文字化けし問題まとめ:1.コミット方式がpostであれば,文字化けをしないためにはrequestオブジェクトの符号化を設定するだけでよい.注意:クライアントデータがどのようにコミットされているか、requestはどのような符号化に設定すべきか.2.コミット方式がgetの場合、requestオブジェクトを設定する符号化は無効であり、文字化を乱さないようにするには、手動で変換するしかない.
3.get方式の文字化けしは、サーバ構成を変更することで実現することもできます.Tomactのconfディレクトリの下のserverを変更します.xmlファイル.3.1この方法は、サーバを変更して柔軟性がないため推奨されません.3.2このように設定すると、requestのsetCharacterEncodingはどのような符号化を設定し、コネクタはどのように符号化され、前の変更よりも柔軟であるが、依然として私たちのアプリケーションがサーバにしっかりと依存することになる.推薦もされません.
四:最後:URLアドレスの後ろに中国語のデータがついている場合、必ずURLコードを通してください.フォームに提出されたパラメータは中国語のデータがあり、ブラウザは自動的にコードしてくれるが、リンクを通じて直接中国語のパラメータを持っている場合、ブラウザはコードしてくれない.Encode(,“UTF-8”)が先に符号化されます.
一: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
四:最後:URLアドレスの後ろに中国語のデータがついている場合、必ずURLコードを通してください.フォームに提出されたパラメータは中国語のデータがあり、ブラウザは自動的にコードしてくれるが、リンクを通じて直接中国語のパラメータを持っている場合、ブラウザはコードしてくれない.Encode(,“UTF-8”)が先に符号化されます.