servlet(5)乱符号化問題
1810 ワード
一:伝達中の文字化けし
1、原因
ブラウザがWEBサーバーに中国語を送信する時、ブラウザは直接中国語を送信することができなくて、ブラウザは先に中国語をISO 8859-1の字を通ります
ふごう
コード#コード#
方
式はあらかじめ符号化して、ネットワークの伝送の中で伝送するのは符号化した後のデータで、tomcatサーバーに着いた後に、tomcatサーバーは伝送したことを知りません
やってくる
はい
文
,
正常に表示できません
2、解決方法:
1)javaプログラムでISO 8859-1の文字符号化方式を用いて復号し、中国語をサポートする文字符号化方式を用いて再符号化する
byte[] bs =sname.getBytes("ISO8859-1");
次に、sname=new String(bs、「GB 18030」);
この解決策は汎用的で、開発効率が低すぎて、ブラウザクライアントが提出したデータが多い場合、
かいはつ
効率が低下します.
2)requestオブジェクトからデータを取得する前に,文字符号化方式を設定する.
request.setCharacterEncoding("GB18030");
でもこのコードは
HTTPプロトコルにおける要求プロトコルにおける要求体中の文字を符号化する,すなわちpostリクエストに現れる文字化けのみを解決する.
に質問
,
getリクエストはこの方法で解決できません.
3)tomcatサーバのCATALINA_をHOME/conf/server.xmlファイルのconnector遷移にコードを追加してgetリクエストの文字化けしを解決し、
二:データ展示中に文字化けした
1、原因
servletのPrintWriterを使って中国語をブラウザに出力して文字化けします
2、解決方法
メソッドに追加:response.setContentType("text/html;charset=GB18030");
3、問題に注意
text/htmlは応答の内容のタイプを表し、勝手に書くことはできません.応答するのは普通のテキストやHTMLコードであればtext/htmlでなければなりません.書き間違えたら
出る
現
ファイルのダウンロードのヒント.
三:データの保存中に文字化けしが発生
1、原因
保存する前から文字化けしていたので、データベースに保存するときは文字化けしていたに違いありません.
2、解決
Oracleデータベースはインストール時にサポート言語を選択するよう求められます.中国語を選択しています.
Oracleはインストール後、中国語をサポートします.だから保証する
保存する
の
保存する前のデータが文字化けしてない限り、保存後の
データは文字化けしていません.しかしMYSQLデータベースでは、インストール時に
手動
の設定MYSQLデータベースの文字コード方式、例えば
文字コード方式を設定しないと、中国語を挿入したときに文字化けしてしまいます.
1、原因
ブラウザがWEBサーバーに中国語を送信する時、ブラウザは直接中国語を送信することができなくて、ブラウザは先に中国語をISO 8859-1の字を通ります
ふごう
コード#コード#
方
式はあらかじめ符号化して、ネットワークの伝送の中で伝送するのは符号化した後のデータで、tomcatサーバーに着いた後に、tomcatサーバーは伝送したことを知りません
やってくる
はい
文
,
正常に表示できません
2、解決方法:
1)javaプログラムでISO 8859-1の文字符号化方式を用いて復号し、中国語をサポートする文字符号化方式を用いて再符号化する
byte[] bs =sname.getBytes("ISO8859-1");
次に、sname=new String(bs、「GB 18030」);
この解決策は汎用的で、開発効率が低すぎて、ブラウザクライアントが提出したデータが多い場合、
かいはつ
効率が低下します.
2)requestオブジェクトからデータを取得する前に,文字符号化方式を設定する.
request.setCharacterEncoding("GB18030");
でもこのコードは
HTTPプロトコルにおける要求プロトコルにおける要求体中の文字を符号化する,すなわちpostリクエストに現れる文字化けのみを解決する.
に質問
,
getリクエストはこの方法で解決できません.
3)tomcatサーバのCATALINA_をHOME/conf/server.xmlファイルのconnector遷移にコードを追加してgetリクエストの文字化けしを解決し、
Connector port="8080"protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="GB18030"/>
二:データ展示中に文字化けした
1、原因
servletのPrintWriterを使って中国語をブラウザに出力して文字化けします
2、解決方法
メソッドに追加:response.setContentType("text/html;charset=GB18030");
3、問題に注意
text/htmlは応答の内容のタイプを表し、勝手に書くことはできません.応答するのは普通のテキストやHTMLコードであればtext/htmlでなければなりません.書き間違えたら
出る
現
ファイルのダウンロードのヒント.
三:データの保存中に文字化けしが発生
1、原因
保存する前から文字化けしていたので、データベースに保存するときは文字化けしていたに違いありません.
2、解決
Oracleデータベースはインストール時にサポート言語を選択するよう求められます.中国語を選択しています.
Oracleはインストール後、中国語をサポートします.だから保証する
保存する
の
保存する前のデータが文字化けしてない限り、保存後の
データは文字化けしていません.しかしMYSQLデータベースでは、インストール時に
手動
の設定MYSQLデータベースの文字コード方式、例えば
文字コード方式を設定しないと、中国語を挿入したときに文字化けしてしまいます.