jspの中の中国語の文字化けし問題の詳しい解
jspページでは、中国語の文字化けし問題が一般的な問題です.出会っていないのは悪くないが、コードのトランスコードにぼんやりしている人に出会って、絶対に頭が痛くて「頭で地面を奪う」と言って、ははは、冗談を言って、、、
まず、jspにおける符号化に関連するいくつかの場所を抽出する.
最初の場所:
ここでの符号化フォーマットはjspファイルの格納フォーマットである.Eclipseはこのエンコード形式でファイルを保存します.中の漢字を含むjspファイルをコンパイルします.
2番目の場所:
ここでの符号化は復号フォーマットである.2番目にいるこの行は、なくてもいいです.デフォルトではiso 8859-1の符号化フォーマットが使用されます.UTF-8として保存されているファイルがiso 8859-1に復号されると、中国語は文字化けします.つまり一致しなければならない.
3つ目の場所:
ここでの符号化はブラウザを制御する復号方式である.前の復号が一致し、誤りがなければ、この符号化フォーマットは関係ありません.ブラウザがどの符号化フォーマットを使用するか分からないため、文字化けが発生するページもあります.ページが埋め込まれることがあるため、ブラウザが符号化フォーマットを混同し、文字化けが発生します.
さて、その3つの場所を話して、次は文字化けしの問題を話し始めます.文字化けしが発生した場合は、urlに中国語のパラメータ、formの提出(get、postを含む)があり、解決策は以下のようにまとめられています.
1、パラメータを受け入れるときに符号化変換を行う:tomcatの内部符号化フォーマットiso 8859-1は、提出するときに、提出する符号化フォーマットが設定されていなければiso 8859-1で提出され、受け入れたjspはutf-8で受け入れられ、文字化けしてしまうことを知っている.
たとえば、要求ページの
または
では、応答ページでは、パラメータpの値を受け入れることができます.
2、要求ページで特殊文字パラメータを2回符号化し、それからページに応答して1回復号する:注意:符号化を転送するときは2回回転し、復号するには1回で中国語パラメータの乱符号化問題を解決することができる.これはURLがパラメータを転送するときにサーバが自動的に復号するからである.
たとえば、要求ページの
jsでトランスコードを行うと、
では、応答ページでは、パラメータpの値(中国語):
3、サーバーtomcatのデフォルトの符号化フォーマットを変更する:tomcatの下のconfフォルダの下のサービスを開く.xmlは8080を検索し、見つかったラベルにURIEncoding="UTF-8"を追加します.
例:
4、フィルタを使ってすべてのjspを符号化処理します:このネット上には多くの例があります.自分で調べてください.
例:Encodingフィルタ
そして、Web.xmlファイルの設定:
*5、要求ページの先頭で、要求の符号化コードを実行する
コミットされたコンテンツの文字セットをUTF-8に設定します.これで、このパラメータを受け入れるページはトランスコードする必要はありません.直接使用
漢字パラメータが得られます.しかし、どのページもこの言葉を実行する必要があります.この方法はpostコミットにも効果的で、getコミットやファイルアップロード時のenctype=「multipart/form-data」には無効です.
(requestに対応するresponseページ、追加
)
△この方法は*番を打つのは、ネット上で誰かがこの方法を提案したからですが、私のテストで合格しませんでした.有効かどうかは、自分で測ってもいいです.
まず、jspにおける符号化に関連するいくつかの場所を抽出する.
最初の場所:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
ここでの符号化フォーマットはjspファイルの格納フォーマットである.Eclipseはこのエンコード形式でファイルを保存します.中の漢字を含むjspファイルをコンパイルします.
2番目の場所:
<%@ page contentType="text/html;charset=utf-8"%>
ここでの符号化は復号フォーマットである.2番目にいるこの行は、なくてもいいです.デフォルトではiso 8859-1の符号化フォーマットが使用されます.UTF-8として保存されているファイルがiso 8859-1に復号されると、中国語は文字化けします.つまり一致しなければならない.
3つ目の場所:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
ここでの符号化はブラウザを制御する復号方式である.前の復号が一致し、誤りがなければ、この符号化フォーマットは関係ありません.ブラウザがどの符号化フォーマットを使用するか分からないため、文字化けが発生するページもあります.ページが埋め込まれることがあるため、ブラウザが符号化フォーマットを混同し、文字化けが発生します.
さて、その3つの場所を話して、次は文字化けしの問題を話し始めます.文字化けしが発生した場合は、urlに中国語のパラメータ、formの提出(get、postを含む)があり、解決策は以下のようにまとめられています.
1、パラメータを受け入れるときに符号化変換を行う:tomcatの内部符号化フォーマットiso 8859-1は、提出するときに、提出する符号化フォーマットが設定されていなければiso 8859-1で提出され、受け入れたjspはutf-8で受け入れられ、文字化けしてしまうことを知っている.
たとえば、要求ページの
<a href="page.jsp?p= ">url </a>
または
<form action="page.jsp" method="post">
<input type="text" name="p">
<input type="submit" value=" ">
</form>
では、応答ページでは、パラメータpの値を受け入れることができます.
String p=new String(request.getParameter("p").getBytes("iso-8859-1"),"utf-8");
2、要求ページで特殊文字パラメータを2回符号化し、それからページに応答して1回復号する:注意:符号化を転送するときは2回回転し、復号するには1回で中国語パラメータの乱符号化問題を解決することができる.これはURLがパラメータを転送するときにサーバが自動的に復号するからである.
たとえば、要求ページの
<a href="page.jsp?p=<%=URLEncoder.encode(URLEncoder.encode(" ", "UTF-8"), "UTF-8") %>"> </a>
jsでトランスコードを行うと、
var post_date=encodeURI(encodeURI(b));
var action="surveyResult.action?answer="+post_date;
では、応答ページでは、パラメータpの値(中国語):
String p=URLDecoder.decode(request.getParameter("p"), "utf-8");
3、サーバーtomcatのデフォルトの符号化フォーマットを変更する:tomcatの下のconfフォルダの下のサービスを開く.xmlは8080を検索し、見つかった
例:
<Connector port="8080"maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443" acceptCount="100"debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"disableUploadTimeout="true" URIEncoding=”UTF-8”/>
4、フィルタを使ってすべてのjspを符号化処理します:このネット上には多くの例があります.自分で調べてください.
例:Encodingフィルタ
package com.zzw;
import java.io.IOException;
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 Encoding implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
そして、Web.xmlファイルの設定:
<filter>
<filter-name>encoding</filter-name>
<filter-class>com.zzw.Encoding</filter-class>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/ToCh_zn</url-pattern>
</filter-mapping>
*5、要求ページの先頭で、要求の符号化コードを実行する
request.setCharacterEncoding("UTF-8");
コミットされたコンテンツの文字セットをUTF-8に設定します.これで、このパラメータを受け入れるページはトランスコードする必要はありません.直接使用
String str = request.getParameter("something");
漢字パラメータが得られます.しかし、どのページもこの言葉を実行する必要があります.この方法はpostコミットにも効果的で、getコミットやファイルアップロード時のenctype=「multipart/form-data」には無効です.
(requestに対応するresponseページ、追加
responset.setCharacterEncoding("UTF-8");
)
△この方法は*番を打つのは、ネット上で誰かがこの方法を提案したからですが、私のテストで合格しませんでした.有効かどうかは、自分で測ってもいいです.