フォームのコミット時の文字化けしの問題の解決
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法によりデータを指定文字セットに従って符号化するので、文字化けが発生しない.