1

我在我的 web 应用程序中编码/解码法语字符时遇到问题。技术堆栈如下所示:

  • 一个实用 jar,它对使用目标 Java 1.5 编译的法语字符进行了编码/解码
  • 一场将使用 maven 编译的战争,目标是 Java 1.5
  • Tomcat 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>

另外,我有一个包含 helper jar 的 webapp (war)。在war里面的Servlet中,它接收到一个POST,body中包含了String

&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"
/>

在我的 Servlet doPost 我也尝试添加

request.setCharacterEncoding("UTF-8");

这里发生了什么?为什么当我在简单的 Java 程序中运行它(在我的机器上本地运行)时它可以工作,然后当我将它作为对 tomcat 的战争部署时,它无法处理法语字符?

旁注:我的第一次尝试实际上没有使用手动替换法语字符的实用程序类,我使用的是 Java 的 URLEncode 和 URLDecode,它给了我 %C3%A8 这很好,但与上面相同的问题,当我尝试解码时我结束了用 è 而不是 è

谢谢你的帮助

4

0 回答 0