jspの中の中国語の文字化けし問題の詳しい解


jspページでは、中国語の文字化けし問題が一般的な問題です.出会っていないのは悪くないが、コードのトランスコードにぼんやりしている人に出会って、絶対に頭が痛くて「頭で地面を奪う」と言って、ははは、冗談を言って、、、
まず、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を検索し、見つかったラベルにURIEncoding="UTF-8"を追加します.
例:
<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");

)
△この方法は*番を打つのは、ネット上で誰かがこの方法を提案したからですが、私のテストで合格しませんでした.有効かどうかは、自分で測ってもいいです.