Java Web学習ノート(一)JSP中国語の文字化けし問題を解決する

7382 ワード

皆さんはJSPの开発の过程の中で、いつも中国语の文字化けしの问题が现れて、甚だしきに至ってはみんなを困らせているかもしれなくて、今JSPの开発の中で出会った中国语の文字化けしの问题と解决方法を书いてみんなの参考に供します.まずJava中国語の問題の由来を理解します:Javaのカーネルとclassファイルはunicodeに基づいて、これはJavaプログラムに良好なプラットフォーム間性を持たせて、しかしいくつかの中国語の文字化けし問題の面倒をもたらしました.理由は主に2つの面があり、JavaとJSPファイル自体のコンパイル時に発生した文字化けし問題とJavaプログラムが他のメディアで相互作用して発生した文字化けし問題である.まずJava(JSPを含む)のソースファイルには中国語が含まれている可能性が高いが、JavaとJSPのソースファイルの保存方式はバイトストリームに基づいており、JavaとJSPがclassファイルにコンパイルされる過程で使用される符号化方式がソースファイルの符号化と一致しないと、文字化けが発生する.このような文字化けしに基づいて、Javaファイルにできるだけ中国語を書かないことをお勧めします(注釈部分はコンパイルに参加せず、中国語を書いても大丈夫です)、書かなければならない場合は、できるだけ手動でパラメータ-ecoding GBKまたは-ecoding gb 2312または-ecoding UTF-8を持ってコンパイルします;JSPでは、ファイルヘッダに加えたり、基本的にこのような文字化けし問題を解決することができます.以下に、一般的な中国語の文字化けし問題の解決方法を示す(以下の例では、ecodingはgb 2312を採用し、ecoding GBKまたはecoding UTF-8に設定することもできる).
一、JSPページの文字化けという文字化けの問題は比較的簡単で、一般的にページの符号化が一致しないことによる文字化けである.一般的に初心者はこのような問題が発生しやすい.具体的には、Ø文字セットを使用して次の表示ページ(display.jsp)を符号化することを指定していないと文字化けになる.


JSP     







このような文字化けしの原因は、ページに使用する文字セットの符号化が指定されていないこと、JSPページに中国語文字が表示されていること、デフォルトのISO-8859-1文字セットに中国語文字がないこと、解決方法:ページの開始場所で次のコードで文字セットの符号化を指定すればよいこと、JSPページで符号化方式(gb 2312)を指定し、ブラウザの復号方式と同じ設定、つまり、ページの最初の行に「」を付けると、文字化けしが消えます.完全なページは次のとおりです.



JSP     







Ø符号化文字セットの設定が一致しない場合、次の表示ページ(display.jsp)に文字化けが発生します.




JSP     







この文字化けしの原因はページ符号化の不一致による文字化であり、この例では文字セットを設定する場所が3つ見られ、以下では、最初の符号化フォーマットがjspファイルの記憶フォーマットであることをそれぞれ理解する.Eclipseはこのエンコード形式でファイルを保存します.中の漢字を含むjspファイルをコンパイルします.2番目は復号フォーマットとして符号化される.gb 2312として保存されたファイルはiso 8859-1に復号されるため、中国語があれば必ず文字化けします.つまり一致しなければならない.2番目の場所があるこの行は、なくてもいいです.デフォルトでもiso 8859-1の符号化フォーマットが使用されます.だからこの行がなければ、文字化けしてしまうこともあります.一致しなければならない.3番目の符号化は、ブラウザを制御する復号方式である.前の復号が一致し、誤りがなければ、この符号化フォーマットは設定しなくてもよい.ブラウザがどの符号化フォーマットを使用するか分からないため、文字化けが発生するページもあります.ページが埋め込まれることがあるため、ブラウザが符号化フォーマットを混同して文字化けしている.完全な解決コードは次のとおりです.




JSP     







二、フォームが中国語を提出する時に文字化けして現れる下は1つの提出ページ(submit.jsp)で、コードは以下の通りである.



JSP     





次は処理ページ(process.jsp)コードです.



JSP     







submit.jspコミット英語文字が正しく表示されると、中国語コミット時に文字化けしが発生します.理由:ブラウザはデフォルトでUTF-8符号化方式を使用してリクエストを送信しますが、UTF-8とGB 2312は符号化方式が文字を表す場合に異なり、文字が認識できない場合があります.ØPOST提出方式解決方法:A、パラメータを受け取る時に符号化変換String s=new String(request.getParameter("name").getBytes("ISO-8859-1"),"gb 2312");修正後のprocess.jspコードは以下の通りです.



JSP     







この方法を使用する場合、各パラメータはこのようにトランスコードされなければならない.面倒くさい.しかし、確かに漢字を手に入れることができます.B、リクエストをrequest.seCharacterEncoding(「gb 2312」)で統一符号化することで、中国語の正常な表示を実現した.修正後のprocess.jspコードは以下の通りです.




JSP     







この方法でこのパラメータを受け入れるページがトランスコードされる必要がなければ,漢字パラメータが得られる.しかし、どのページもこの言葉を実行する必要があります.C、各ページにrequest.setCharacterEncoding(「gb 2312」)を書かないように、フィルタを用いてすべてのjspを符号化処理することができる.サーブレット仕様のオーバーライドを使用して符号化を指定します.主なコードは次のとおりです.
import java.io.*;
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 

public class SetCharacterEncodingFilter implements Filter {
    protected String encoding = null; 
    
    public void destroy(){ 
        this.encoding = null; 
    } 
    
    public void init(FilterConfig filterConfig) throws ServletException {
        this.encoding = filterConfig.getInitParameter("encoding");
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding(encoding);
        response.setContentType("text/html;charset="+encoding);
        chain.doFilter(request, response);
    }
}

Web.xmlでのフィルタの構成は次のとおりです.

    SetCharacterEncodingFilter
    SetCharacterEncodingFilter
    
        encoding
        gb2312
    


    SetCharacterEncodingFilter
    /*

修正後のprocess.jspコードは以下の通りです.



JSP     






以上の方法はPOST方式の提出にのみ効果がある.ØGET提出方式get方式で中国語を提出すると、パラメータを受け取るページにも文字化けしが発生します.この文字化けしの原因もtomcatの内部符号化フォーマットiso 8859-1によるものです.Tomcatはgetのデフォルト符号化方式iso 8859-1で漢字を符号化し、符号化後urlに追加し、受信ページで得られるパラメータが乱符号化される.解決方法:A、POST提出方式解決方法の第一の方式を使用して、受け取った文字を復号して、再符号化する.B、tomcatの下server.xmlのConnectorノードをまず構成してuseBodyEncodingForURI="true"属性構成を追加し、その後JSPページに設定した符号化フォーマットを加えて符号化する.1、Tomcatにおけるserver.xmlの構成は以下の通りである.

2、修正後のprocess.jspコードは以下の通りである.




JSP     







三、データベース接続に文字化けが発生するこの文字化けは、データベースに挿入された中国語を文字化けにしたり、表示を読み出したりする際にも文字化けをしたりします.解決方法は、データベース接続文字列に符号化文字セットString Url="jdbc:sqlserver://localhost:1433; DataBaseName=mydb;user=sa&password=sa&useUnicode=true&characterEncoding=GB2312";JSPページでは、次のコードを使用します.
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("gb2312");

四、JspがMyEclipseで開いている文字化けしの問題について、すでに存在する項目について、Jspファイルの記憶フォーマットはutf-8である可能性がある.新しくインストールされたeclipseの場合、デフォルトで開いている符号化フォーマットはiso 8859-1である可能性があります.だからjspの中の漢字が文字化けした.このスクランブル魚の解決策は、A、Myeclispe Window->PreferencesポップアッププロパティウィンドウGeneral->Workspace設定Text file encodingグローバル設定です.B、右クリックあなたのプロジェクト---属性---Text file encodingプロジェクト設定5、htmlページについてeclipseで開く文字化けしが発生した場合、ほとんどのページがdreamweaverによって作成されているため、その記憶フォーマットはeclipseの識別と異なる.一般的には、eclipseにjspを新規作成し、dreamweaverからページ内容をコピーしてjspに直接貼り付けるだけです.六、JSPページはURLを通じて中国語のパラメータを伝達する文字化けしの問題がプロジェクトの中で、私達はよくjspページの切り替えの中で中国語の文字を伝達する必要があることに出会う.例:http://website/test1.jsp?act=add&type=アップルØは一般的にURLに直接パラメータを中国語に書くことはめったにありません.例の「type=アップル」のように伝えられています.このような場合、私たちの受信パラメータのページでは簡単な変換をするだけでいいです.コードtest 1.jsp:(主要部)


Øより一般的な方法は、urlの中の中国語文字を符号化し、type=%20 D%20 Bのような文字にすることです.コードMyJsp 1.jsp:


test

コードMyJsp 2.jsp: