Webapp中的法语字符编码

时间:2012-05-16 13:18:57

标签: java tomcat encoding

我在webapp中编码/解码法语字符时遇到问题。 技术堆栈看起来像:

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

另外,我有一个包含帮助jar的webapp(war)。 在war里面的Servlet中,它接收一个包含String

的主体的POST
&egrave; &egrave; &egrave; test 2

然后在读完POST主体之后,我将它传递给了解码函数,结果得到了这个结果:

[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这很好,但是同样的问题如上所述,当我尝试解码我最终用¨而不是è

感谢您的帮助

0 个答案:

没有答案