2

私たちはTomcat7を使用する本番サーバーを使用しており、何らかの理由で、管理者はCATALINA_OPTS="-Dfile.encoding=UTF-8"回避策の設定を控えています。

これは、WARファイルをデプロイするときに、TomcatがUnicodeの対応する文字ではなく文字化けした文字を返すことを意味します。

また、これを私たちのに含めましたがweb.xml、役に立ちませんでした。

<filter>
    <filter-name>encoder</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>encoder</filter-name>
    <url-pattern>*</url-pattern>
</filter-mapping>

サーバールームに侵入して構成を変更する人を派遣せずに、これをどのように管理しますか?

4

1 に答える 1

2

まず第一に、正確に何をするのかを理解することが重要です。-Dfile.encoding=UTF-8これはSun/Oracle JVM固有の設定であり(したがって、他のすべてのJVMで必ずしも機能するとは限りません!)、基本的.classに、プラットフォームのデフォルトのエンコーディングではなく、指定されたエンコーディングを使用してJavaファイルを読み取るようにJVMに指示します。したがって、これを設定すると、Javaクラス/変数名の「特殊文字」またはJavaクラスのハードコードされた値を使用することによって引き起こされる可能性のあるMojibakeStringの問題のみが解決されます(そうです、正しく読んでください:Javaクラスのみであり、他のファイルではないため、間違いなくプロパティファイルやJSFXHTMLファイルなどではありません)。

正直なところ、これがあなたの具体的な問題に対する正しい解決策であるとはほとんど想像できません。なぜJavaクラスで特殊文字を直接使用するのでしょうか。クラス/変数名はすべて英語で、ローカライズされたテキストはリソースバンドルファイルに配置する必要があります。自尊心のあるJava開発者は皆、この慣習を守っています。

その事実を踏まえ、Javaクラスでも特殊文字をまったく使用していないと仮定すると、具体的な問題は他の何かが原因であると私は信じています。問題の症状は、具体的な問題の考えられる根本原因を確認するために十分に具体的に説明されていません(どのステップで失敗しますか?どの文字を正確に期待し、代わりに取得しますか?など)。少なくとも、SpringフィルターのURLパターンが完全に間違っていることはわかります。にマッピングする必要があります/*

<filter-mapping>
    <filter-name>encoder</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

(ちなみに、これには必ずしもSpringは必要ありません。実装に2行または3行しかないカスタムで十分です)FilterdoFilter()

参照:

于 2012-10-01T14:32:34.893 に答える