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を受け取ります
è è è test 2
次に、POST 本文を読み取った後、decode 関数に渡し、結果として次のようになりました。
[decodeFrenchCharacters] start: è è è 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 を使用していました。 è ではなく é で終わる
ご協力いただきありがとうございます