ajax+springエンジニアリング、Tomcat 5.5 UTF-8文字化けし問題解決方法


Javaの文字化けしについては,二バイト文字環境開発者の問題であり,異なるサービス,異なるバージョン,さらには異なるシステム環境においても大きな影響を及ぼしている.
今日は中国語windowsでTomcat 5.5サービスの下、UTF-8の文字化けして問題を解決します.
まず、webコンテナのデフォルト符号化はiso-8859-1であり、1つの漢字が2バイト、utf-8の1つの漢字が3バイトを占めていることを理解する必要があります.したがって、データ転送中にコンテナ符号化フォーマットを手動で設定する必要があります.そうしないと、文字ビットが失われます.つまり3バイトが2バイトになると、自然と文字化けしてしまいます.
次に、Tomcat 5以降、postとgetメソッドの符号化制御が分離され、従来のように、
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
問題を解決できなくなった.
これがわかったら、また見てみましょう.
最初のステップはtomcatを変更します.
対応するサイトのserverを見つけます.xml後、奥のコネクタラベルに追加
useBodyEncodingForURI="true"
この言叶はtomcatにページの符号化でpostを処理することを教えて、使うことをお勧めします.
もっとひどいのは
URIEncoding="utf-8"
ただし、強制指定符号化されているため、他の符号化されたページが存在すると問題が発生するため、推奨されません.
第2ステップでは、jspページヘッダを変更します.
私はサボって、全部加えました.
<%@ page language="java"pageEncoding="UTF-8"%>
を選択し、htmlタグのheadタグに

ステップ3では、指定された符号化を変更します.
jspヘッダ部分では、requestとresponseが使用される前に、
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
以上の3つのステップを経て、postから来た文字は正常にrequestを使うことができます.getParameter()を取得して使用しました.
ステップ4では、getメソッドで出力される接続パラメータを変更します.
New String(java.net.URLEncoder.encode(「入力文字」,「UTF-8」)
tryを覚えています.私はパッケージで使っています.
以上のステップを経て、基本的に文字化けしの問題が解決しました.
======================================================================
実践手順:
1.serverを変更します.xml、中のコネクタラベルに追加
useBodyEncodingForURI="true"

  <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
    <Connector
port="8001"               maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true"/>
    <!-- Note : To disable connection timeouts, set connectionTimeout value

2.工事中のwebを修正する.xml
 
<filter>
        <filter-name>encodingFilter</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>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
  </filter>  
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>*.do</url-pattern>
  </filter-mapping>

3.jspページの先頭で使用:
<%@page language="java"  errorPage="/error.jsp"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>
4.OK、これで楽屋に中国語を普通に伝えることができます.
まだできない場合はjavascript関数encodeURI(str)を使用してバックグラウンドに渡されるパラメータを変換します.
5.バックグラウンドからページに中国語のパラメータを伝えます.

String Data="  ";
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println(Data);

//-------------------------------------------------
JSPページにおけるpageEncodingとcontentTypeの2つの属性の違いについて:pageEncodingはjspファイル自体のエンコードcontentTypeのcharsetであり、サーバがクライアントに送信する際のコンテンツエンコードJSPは2回の「エンコード」を経なければならず、第1段階はpageEncoding、第2段階はutf-8からutf-8、第3段階はTomcatから出てくるページ、contentTypeを使っています.第1段階はjspのコンパイルである.JAvaは、pageEncodingの設定に従ってjspを読み出し、その結果、指定された符号化方式から統一されたUTF-8 JAVAソースコードに翻訳される(すなわち.java)pageEncodingの設定が間違っていたり、設定されていなかったりした場合、出てくるのが中国語の文字化けしである.第2段階はJAVACのJAVAソースからjava byteCodeへのコンパイルであり、JSP作成時にどのような符号化スキームを用いたかにかかわらず、この段階を経た結果はすべてUTF-8のencodingのjavaソースである.JAVACはUTF-8のencodingでjavaソースを読み取り、UTF-8 encodingにコンパイルするのバイナリコード(すなわち.class)であり、これはJVM対定数文字列がバイナリコード(java encoding)内で表現される規範である.第3段階はTomcatである(またはそのアプリケーションcontainer)ステージ2からのJAVAバイナリコードをロードして実行し、出力した結果、つまりクライアントに見られるようになった.このときステージ1とステージ2に隠されたパラメータcontentTypeは機能contentTypeの設定を発揮する.pageEncodingとcontentTypeのプリセットはISO 8859-1である.一方を勝手に設定すると、もう一方は同じである(TOMCAT 4.1.27はそうである).しかし、これは絶対的なものではありません.これはそれぞれのJSPCの処理方法次第です.一方、pageEncodingはcontentTypeに等しくなく、アジア地域の文字CJKV系JSPページの開発と展示に有利である(例pageEncoding=GB 2312はcontentType=utf-8に等しくない).jspファイルは似ていません.java,.JAvaは、コンパイラに読み込まれたときにデフォルトでオペレーティングシステムが設定したlocaleに対応する符号化を採用しています.例えば、中国大陸はGBK、台湾はBIG 5またはMS 950です.一般的に私たちは手帳にもueにもコードを書いていますが、特別なトランスコードがなければ、ローカルコードフォーマットの内容が書かれています.そのため、コンパイラが採用した方法は、仮想マシンに正しい資料を得ることができます.しかしjspファイルはそうではありません.このデフォルトのトランスコードプロセスはありませんが、pageEncodingを指定すると正しいトランスコードが実現します.例えば、<%@page contentType="text/html;charset=utf-8"%>は、入力した"こんにちは"はgbkのものですが、サーバーが正しく"こんにちは"を捕まえたかどうかはわかりません.
//----------------------------------------------------------------