Web プロジェクトの開発が初めての場合、多くの人が漢字文字化けの問題に遭遇しますが、Baidu の解決策は目まぐるしく、いくら修正を加えても問題は解決できません。文字化けしたコードはどのようにして生成されるのでしょうか? コードが文字化けする理由を知り、その基礎となる原則を理解すると、目が明るくなることに気づくでしょう。早速、下の図を見てください。
上の図からもわかるように
- エンコード 1 とデコード 1 で使用されるエンコード形式は同じである必要があります
- エンコード 2 とデコード 2 で使用されるエンコード形式は同じである必要があります
※上記2つの条件を満たしていれば文字化けは発生しませんが、この4箇所は通常UTF-8 (ユニバーサルコード)が使用されます。
コーディング設定:(上の図のシリアル番号に従って)
-
形状:
<form id="xx" action="xx" method="xx" accept-charset = "UTF-8">
-
サーバー エンコード形式 (リクエスト):
Tomcat は、GET メソッドと POST メソッドによって送信された情報のエンコードを処理するためにさまざまな方法を使用します。POST リクエストの場合、Tomcat は request.setCharacterEncoding メソッドによって設定されたエンコードを使用して処理します。設定されていない場合は、の場合、デフォルトのエンコーディングが使用されます。GET リクエストは異なります。Tomcat は、GET リクエストに対して Tomcat のデフォルトのエンコーディングを一律に使用します。
Tomcat 7 以前のバージョンのデフォルトのエンコード方式はIOS-8859-1ですが、Tomcat 8 以降では、デフォルトでUTF-8が使用されます。1. 受信 get メソッド
方法 1: (使用されている文字セット エンコーディングを知っている) 最初にデコードし、次にエンコードする
String str = new String(getParameter("message").getBytes("ISO-8859-1"),"UTF-8");
方法 2: Tomcat 構成ファイルを変更する (非推奨)
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
2. 受信ポストメソッド
方法1:(request.setCharacterEncoding("UTF-8") ;
パラメータ取得前から有効)方法 2: web.xml でフィルターを構成する必要があります
<!-- post乱码过虑器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-
応答:
方法 1:response.setCharacterEncoding("UTF-8");
(出力ストリームで使用されるエンコーディングを設定するためにのみ使用できます)方法 2:
response.setContentType("text/html;charset=UTF-8");
(out 出力ストリーム内の文字のエンコード方法を設定し、ブラウザがこれらの文字を受信した後にデコードするために使用するエンコード方法も設定します) -
ブラウザに次の表示が表示されます:
ページ ヘッダーに jsp または html を追加します<meta content="text/html; charset=utf-8" />"
。ブラウザで開発モードを開き、コンソールで document.charset を使用して現在のページのエンコード形式を表示します。
まとめ:上記4箇所のエンコード方法が同じであれば文字化けは発生しません。