web-dev-qa-db-ja.com

Tomcatの文字エンコードの問題

奇妙な文字エンコーディングが行われています。私はJSP(JSTL)とStrutsをTomat 6で使用しています。

私はJSPページエンコーディングを持っています:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

問題は、encodeURIを使用してURLを渡そうとしたときです。

<script type="text/javascript">
          $('#mailer_filter').change(function(){
            var val = $(this).val();
            console.log(val);
            console.log(escape(val));
            console.log(encodeURI(val));
            location.href = 'mailList.a?' + encodeURI($(this).val());
          });
        </script>

アクション(Javaエンド)のパラメーターは次のようになります。

Gaz Métro

ただし、フロントエンドでは次のように表示されます。

Gaz Métro

これは正しい方法です。これについて私は何ができますか?

16
OakvilleWork

フォローしてください

1)HTMLコード

 <meta contentType="text/html; charset="UTF-8"/>

2)IE View-Encoding-Uni​​code(UTF-8)のブラウザ設定

3)Tomcatサーバーserver.xml-Connectorタグに「URIEncoding」属性が追加されました

<Connector port="8080" protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           redirectPort="8443" URIEncoding="UTF-8"/>

catalina.sh/catalina.bat-以下を追加

set Java_OPTS=--Xms256m -Xmx1024m -Xss268k -server -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -Djava.awt.headless=true -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8

set CATALINA_OPTS=-Dfile.encoding="UTF-8"

4)応答のMIMEタイプは「application/x-www-form-urlencoded」である必要があります

18
Rahul Agrawal

これらの手順を実行しましたか?

http://wiki.Apache.org/Tomcat/FAQ/CharacterEncoding#Q8

以下をコピー:

すべての文字エンコーディングとしてUTF-8を使用するのは安全です。これはほとんどすべての状況で機能するはずです。

UTF-8の使用に完全に切り替えるには、次の変更を行う必要があります。

  1. Server.xmlでURIEncoding = "UTF-8"を設定します。参照:HTTPコネクター、AJPコネクター。

  2. デフォルトのエンコーディングがUTF-8に設定された文字エンコーディングフィルタを使用する

  3. すべてのJSPを変更して、それらのcontentTypeに文字セット名を含めます。

    たとえば、通常のJSPページには_<%@page contentType="text/html; charset=UTF-8" %>_を使用し、XML構文(JSPドキュメント)のページには_<jsp:directive.page contentType="text/html; charset=UTF-8" />_を使用します。

  4. すべてのサーブレットを変更して、応答のコンテンツタイプを設定し、コンテンツタイプに文字セット名をUTF-8に含めます。

    response.setContentType("text/html; charset=UTF-8")またはresponse.setCharacterEncoding("UTF-8")を使用します。

  5. 使用するコンテンツ生成ライブラリ(Velocity、Freemarkerなど)を変更して、UTF-8を使用し、生成する応答のコンテンツタイプにUTF-8を指定します。

  6. 文字エンコーディングフィルターまたはjspページでエンコーディングをUTF-8に設定する前に、要求パラメーターを読み取る可能性のあるバルブまたはフィルターを無効にします。詳細については、 http://www.mail-archive.com/[email protected]/msg21117.html を参照してください。

11
Paul Grime

Tomcatコネクター(server.xml内)のURIEncodingパラメーターをUTF-8に設定してみてください。

例えば。:

<Connector port="8080" maxHttpHeaderSize="8192"
           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" redirectPort="8443" acceptCount="100"
           connectionTimeout="20000" disableUploadTimeout="true"
           URIEncoding="UTF-8"/>
2
csupnig