フォームのコミット時の文字化けしの問題の解決

1597 ワード

なぜ文字化けしたのか


htmlページで提出されたデータはリクエストrequestオブジェクトにカプセル化され、サーバーに戻ると、サーバー側はISO 8859-1の符号化方式でデフォルトで符号化されます(ps:外国人のソフトウェアデフォルト符号化は英語と数字を識別するISO 8859-1で、文字セットについては別の文章で特筆してもいいです)、私たちが手に入れた中国語のデータは乱符号化されます.これは私たちが異なるリクエスト方式に対して、それぞれの解決策があります.

getリクエスト


フォームに提出されたデータは、要求ラインに表示されます.つまり、私たちのブラウザの検索バーに表示されます(?から、データはキー値ペアの形で後ろに付いています.真ん中は&記号で区切られています).IEブラウザの開発者ツール->ネットワーク表示->トレースを使用して、今回の要求の内容を表示することができます(IEの古いバージョンには「ネットワーク」というオプションがあり、高いバージョンのIEを使用することをお勧めします).ツールには、(クライアントリクエストプロトコル、バージョン、リモートアドレス、サーバポート番号など)など、リクエストされたすべての情報が表示されます.servletサーボプログラムでは、getリクエストに対してdoGet()メソッドを書き換えることができます.ここでは、データを次のように復元します.
    byte[] buf = username.getBytes(“ISO8859-1”); ISO8859-1 
     String username = new String(buf,”UTF-8”); UTF-8 

この方式は汎用とgetとpost方式であり、get方式はこのように復号と符号化しかできない.

postリクエスト


以上のように、私たちのデータが多すぎると、各ユーザーのデータはその2行のコードで変換する必要があり、面倒なので、私たちの要求はできるだけpost方式に従うのが一般的です.post方式は文字化けを解決するのに便利な方法があるからです.コードは次のとおりです.
    request.setCharacterEncoding(“UTF-8”); UTF-8 
    request.getParameter(“username”)

postでの要求に対しては、提出するデータを要求体に入れ、検索欄に露出することなく、要求体の中の内容をsetCahrracterEncoding法によりデータを指定文字セットに従って符号化するので、文字化けが発生しない.