Servlet在Mac上使用美国国际键盘变得奇怪

时间:2012-04-28 21:24:31

标签: java servlets character-encoding special-characters

我有一个简单的表单,我可以输入一些字符。这些字符被发送到一个servlet,它执行getBytes并打印字节。 “ã”的正确UTF-8字节是-61和-93,但我得到-52和-93。 :(

我尽力了解并解决了这个问题,但没有任何效果。我机器上的所有东西都应该是UTF-8,所以我怀疑它与我使用20年的美国国际键盘有关。

任何聪明的灵魂都有从-52和-93来自哪里的线索?

在码头上固定:请参阅下面的答案。

Tomcat上的BROKEN:How to get tomcat to understand MacRoman (x-mac-roman) charset from my Mac keyboard?

2 个答案:

答案 0 :(得分:9)

那是Mac OS Roman character encoding。 (0xBB == -52。)

要检查的一些事项:

  • getBytes(string, "UTF-8")new String(bytes, "UTF-8")
  • 表单应以UTF-8发送:response.setContentType("text/html; charset="UTF-8");。在JSP <%@page pageEncoding="UTF-8"%>
  • <form action="..." accept-charset="UTF-8">

因为所有这些都无济于事:

在您的网络应用程序中设置request filtering(web-xml)。


在pom.xml中编码:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>...</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <encoding>${project.build.sourceEncoding}</encoding>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>...</version>
    <configuration>
        <encoding>${project.build.sourceEncoding}</encoding>
    </configuration>
</plugin>
...
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

答案 1 :(得分:3)

好的,经过8个小时(严重!)后,看起来让这种方法正常工作的唯一方法是:

其中一个问题是:糟糕的maven构建编码类文件的编译。

export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
mvn clean install

   <%@page pageEncoding="UTF-8" %>

现在:

无法知道在pom.xml中传递后一个选项。

这是一个待定的答案:enabling UTF-8 encoding for clojure source files