1

Web アプリケーションでフランス語の文字のエンコード/デコードに問題があります。テクノロジー スタックは次のようになります。

  • ターゲット Java 1.5 でコンパイルされたフランス語文字のエンコード/デコードを行うユーティリティ jar
  • ターゲットJava 1.5でmavenでコンパイルされる戦争
  • トムキャット 5.5.17 / JVM 1.5.0_06-b05

次のようにエンコード/デコードするユーティリティ クラスがあります。

public static String encodeFrenchCharacters(String src)
{
    String output = src;
    logger.info("[encodeFrenchCharacters] start: " + output);

    output = output.replaceAll("è","è");

    logger.info("[encodeFrenchCharacters] end: " + output);
    return output;
}

public static String decodeFrenchCharacters(String src)
{
    String output = src;
    logger.info("[decodeFrenchCharacters] start: " + output);

    output = output.replaceAll("è","è");

    logger.info("[decodeFrenchCharacters] end: " + output);
    return output;
}

そして、機能をテストするための簡単な Java プログラムを作成しました。

public static void main(String[] args)
{
        String s1 = "è è è test 2";
        System.out.println("s1: " + s1);

        String s2 = encodeFrenchCharacters(s1);
        System.out.println("s2: " + s2);

        String s3 = decodeFrenchCharacters(s1);
        System.out.println("s3: " + s3);
}

予想どおり、すべて正常に動作します。

s1: è è è test 2

[encodeFrenchCharacters] start: è è è test 2
[encodeFrenchCharacters] end: è è è test 2
s2: è è è test 2

[decodeFrenchCharacters] start: è è è test 2
[decodeFrenchCharacters] end: è è è test 2
s3: è è è test 2

したがって、上記はよく見えます。このユーティリティ クラスは、maven を介してコンパイルされた jar 内にあります。

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>

それとは別に、ヘルパー jar を含む webapp (war) があります。war内のサーブレットでは、文字列を含むボディでPOSTを受け取ります

&egrave; &egrave; &egrave; test 2

次に、POST 本文を読み取った後、decode 関数に渡し、結果として次のようになりました。

[decodeFrenchCharacters] start: &egrave; &egrave; &egrave; test 2
[decodeFrenchCharacters] end: è è è test 2

Tomcat server.xml で、私はすでに持っています:

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

私のサーブレットdoPostで、私も追加しようとしました

request.setCharacterEncoding("UTF-8");

何が起きてる?単純な Java プログラム (自分のマシンでローカルに実行) で実行すると機能するのに、それを戦争として tomcat にデプロイすると、フランス語の文字を処理できないのはなぜですか?

補足: 私の最初の試みは、実際にはフランス語の文字を手動で置き換えるユーティリティ クラスを使用していませんでした。私は Java の URLEncode と URLDecode を使用していました。 è ではなく é で終わる

ご協力いただきありがとうございます

4

0 に答える 0