1

中国語の UTF-8 文字を出力する必要がある Java EE と Spring を使用して Web サイトを開発しています。いくつかの処理の後、jsp に対して request.getRequestDispatcher(...).forward(request,response) を実行するサーブレットがあります。このサーブレットでは、転送を行う前に、

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");

jsp ファイル (およびプロジェクト内のすべての jsp ファイル) の先頭には、次のものがあります。

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

テストとして、その jsp ページに中国語の UTF-8 文字をハードコーディングしました。このアプリケーションを Tomcat 6 にデプロイしてサーブレットをヒットすると、ブラウザーはページが UTF-8 であることを検出し、漢字を出力します。ただし、次のように表示されます: éÂÂ

Weblogic の起動スクリプトで、-Dfile.encoding に UTF-8 や utf8 などのさまざまな Java オプションを試しましたが、設定に関係なく漢字が文字化けしました。

weblogic.xml には次のようなものがあります。

<charset-params>
    <input-charset>
        <resource-path>/*</resource-path>
        <java-charset-name>UTF-8</java-charset-name>
    </input-charset>
</charset-params>

<jsp-descriptor>
    <encoding>UTF-8</encoding>
</jsp-descriptor>

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>
...
<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

しかし、これらは問題を解決していません。

ソース ファイルはすべて UTF-8 でエンコードされています。

さらに、漢字を含む .jsp または .html ページがあり、Weblogic のサーブレットによって転送されるのではなく直接アクセスすると、漢字が正しく表示されます。

また、私のサーブレットでは、jsp への転送を実行することさえせず、代わりに応答に直接漢字を書き込んでも (response.getWriter().write() を使用)、漢字は依然として正しくありません (ただし、ブラウザーはエンコーディングが UTF-8 であると正しく判断します)。

Tomcat 6 では機能するのに、Weblogic 10 では機能しないのはなぜですか? キャラクターを表示するにはどうすればよいですか?

4

2 に答える 2

1

レスポンスに直接文字を書くと漢字が正しく表示されない原因はわかりませんが、jsp ページに転送するときに文字が正しく表示されない原因はわかりました。転送先の jsp ページは、別の jsp ページの ac:import を実行します。Tomcat と Weblogic では、これを異なる方法で処理します。インポートしたファイルのエンコーディングが正しいことを確認するために、c:import タグで "characterEncoding="UTF-8"" 属性を指定する必要がありました。これにより、インポートされたタグが正しいエンコーディングで出力されました。デフォルトの文字エンコーディングは、 c:import が依存するコードのアプリ サーバー間で異なるようです (そして、おそらく、サーブレット応答から直接文字を書き込むことが、Tomcat では望んでいたのに Weblogic では機能しなかった理由を説明しています)。

于 2013-08-20T18:49:18.887 に答える
0

たぶんこれが役立つ

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app>
    <jsp-descriptor>
        <encoding>UTF-8</encoding>
    </jsp-descriptor>
    <charset-params>
        <input-charset>
            <resource-path>/*</resource-path>
            <java-charset-name>UTF-8</java-charset-name>
        </input-charset>
    </charset-params>
</weblogic-web-app>
于 2013-08-17T00:07:11.627 に答える