Jsp文字化けし問題の解決
7055 ワード
最も基本的な文字化けしの問題
この文字化けし問題は最も簡単な文字化けし問題である.普通は新しく現れます.ページコードの不一致による文字化です.
<%@ page language="java"pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=iso8859-1"%>
3つの場所のコード.
最初の場所の符号化フォーマットはjspファイルの格納フォーマットです.Eclipseはこのエンコード形式でファイルを保存します.中の漢字を含むjspファイルをコンパイルします.
2番目は復号フォーマットとして符号化される.UTF-8として保存されたファイルはiso 8859-1に復号されるため、中国語があれば必ず文字化けします.つまり一致しなければならない.2番目の場所があるこの行は、なくてもいいです.デフォルトでもiso 8859-1の符号化フォーマットが使用されます.だからこの仕事がなければ、「私はいい人です」と文字化けしてしまいます.一致しなければならない.
3番目の符号化は、ブラウザを制御する復号方式である.前の復号が一致し、誤りがなければ、この符号化フォーマットは関係ありません.ブラウザがどの符号化フォーマットを使用するか分からないため、文字化けが発生するページもあります.ページが埋め込まれることがあるため、ブラウザは符号化フォーマットを混同しています.文字化けした.
フォームがPost方式で提出された後に受信した文字化けしの問題
この問題もよくある問題だ.この乱符号化もtomcatの内部符号化フォーマットiso 8859-1が邪魔している、すなわちpostコミット時にコミットの符号化フォーマットが設定されていなければiso 8859-1方式でコミットされ、受信したjspはutf-8方式で受信される.文字化けしを起こす.このような原因である以上、以下にいくつかの解決方法があり、比較する.
Aパラメータ受信時の符号化変換
String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") ;そうすると、各パラメータはこのようにトランスコードされなければなりません.面倒くさい.しかし、確かに漢字を手に入れることができます.
B要求ページの先頭で、要求の符号化コード、requestを実行する.setCharacterEncoding(「UTF-8」)は,コミット内容の文字セットをUTF-8とする.これで、このパラメータを受け入れるページはトランスコードする必要はありません.直接使用
String str = request.getParameter("something");漢字パラメータが得られます.しかし、どのページもこの言葉を実行する必要があります.この方法はpostコミットにも効果的で、getコミットやファイルアップロード時にenctype=「multipart/form-data」は無効です.この2つの文字化けしについては後述する.
C各ページにrequestを書かないようにする.setCharacterEncoding(「UTF-8」)は、フィルタを使用してすべてのjspを符号化することを推奨します.このネットには多くの例がある.自分で調べてください.
フォームgetコミット方式の文字化けし処理方式
get方式で中国語をコミットすると、パラメータを受け入れるページにも文字化けしが発生し、この文字化けしの原因もtomcatの内部符号化フォーマットiso 8859-1によるものである.Tomcatはgetのデフォルト符号化方式iso 8859-1で漢字を符号化し、符号化後urlに追加し、受信ページで得られるパラメータが乱符号化される.
解決策:
Aは、前例の第1の方式を用いて、受信した文字を復号し、符号化する.
B Getはurlコミットを行い、urlに入る前にiso 8859−1の符号化処理を行った.この符号化に影響を与えるにはserver.xmlのConnectorノードはuseBodyEncodingForURI="true"属性配置を追加し、tomcatによるget方式の漢字符号化方式を制御することができる.setCharacterEncoding(「UTF-8」)が設定した符号化フォーマットで符号化する.したがってutf-8に自動符号化され、ページを正常に受け入れればよい.しかし、本当の符号化過程はtomcatがまた
enableLookups="false"redirectPort="8443"acceptCount="100"
debug="0"connectionTimeout="20000"useBodyEncodingForURI="true"
disableUploadTimeout="true"URIEncoding=”UTF-8”/>
中にセットされているURIEncoding="UTF-8"はもう一度符号化されているが、utf-8に符号化されているため、再符号化しても変わらない
化しました.urlから符号化を取得する場合、受信ページはURIEncoding="UTF-8"に従って復号される.
ファイルアップロード時の文字化けし
ファイルをアップロードするとき、formフォームはenctype=「multipart/form-data」に設定されます.この方法では、ファイルをストリームでコミットします.apachのアップロードコンポーネントを使用すると、多くの文字化けし想像が見つかります.これはapachの前期commons-fileuploadのためです.JArにはバグがあり、漢字を取り出して復号する.このようにコミットされるため、符号化はtomcatデフォルト符号化フォーマットiso-8859-1を自動的に使用する.しかし、文字化けの問題は、句点、カンマ、などの特殊な記号が文字化けになり、漢字の数が奇数であれば文字化け、偶数であれば解析が正常になることです.
解決方法:commons-fileupload-1.1.1をダウンロードする.jarのこのバージョンのjarはこれらのバグを解決しました.しかし、コンテンツを取り出す際には、取り出した文字をiso 8859-1からutf-8に符号化する必要がある.正常なすべての漢字と文字が得られます.
Javaコードurlリクエストについて、パラメータの文字化けを受け入れる
urlの符号化フォーマットは、前述のURIEncoding="UTF-8"に依存する.この符号化フォーマットが設定されている場合、urlへの漢字パラメータはすべて符号化しなければならないことを意味します.そうでない場合、得られる漢字パラメータの値はすべて文字化けであり、例えばリンクResponse.sendDerect("/a.jsp?name=張大次元");a.jspではString name");得られるのは文字化けしです.utf-8でなければならないことが規定されているので、この転向はResponse.sendDerect("/a.jsp?name=URLEncode.encode("張大維","utf-8")と書くべきです.
このパラメータURIEncoding="UTF-8"を設定しないとどうなりますか?設定しないでデフォルトの符号化フォーマットiso 8859-1を使用します.問題はまた出てきて、第1はパラメータ値の個数が奇数個の数ならば、正常に解析することができて、偶数個の数を使うならば、最後の文字を得るのは文字化けです.また、最後の文字が英語であれば正常に解析できますが、中国語の句読点が文字化けしています.幸いなことに、パラメータに中国語の句読点がない場合は、パラメータ値の最後に英語の記号を追加して文字化けし問題を解決し、パラメータを得てからこの一番後ろの記号を削除することができます.寄せたり使ったりすることもできます.
スクリプトコードurlリクエストについて、受信したパラメータが文字化されていません
スクリプトではページ転向の制御も行われ、パラメータが付属し、ページ解析というパラメータを受け入れる場合もあります.この漢字パラメータがURIEncoding="UTF-8"で指定された符号化処理を行わない場合、受付ページで受け付けられた漢字も文字化けしてしまう.スクリプト処理符号化は面倒で,対応する符号化スクリプト対応ファイルが必要であり,スクリプト中のメソッドを呼び出して漢字を符号化すればよい.
jspがMyEclipseで開いている文字化けしの問題について
既存のプロジェクトの場合、Jspファイルの格納フォーマットはutf-8である可能性があります.新しくインストールされたeclipseの場合、デフォルトで開いている符号化フォーマットはiso 8859-1です.だからjspの中の漢字が文字化けした.この文字化けしは解決しやすいので、eclipse 3に直接行きます.1の好みの設定にはgeneral-〉edidorがあり、ファイルをutf-8に開くように設定します.Eclipseは自動的に新しいエンコード形式で開きます.漢字は正常に表示されます.
htmlページがeclipseで開いて文字化けした場合について
ほとんどのページはdreamweaverによって作成されるため、そのストレージフォーマットはeclipseの識別と異なる.一般的には、eclipseにjspを新規作成し、dreamweaverからページ内容をコピーしてjspに直接貼り付けるだけです.