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

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

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

有没有聪明的灵魂从-52和-93来自哪里?

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

Tomcat上的BROKEN: 如何让我的Mac键盘让tomcat了解MacRoman(x-mac-roman)字符集?

那是Mac OS Roman字符编码 。 (0xBB == -52。)

有些事要检查:

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


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

在Web应用程序中设置请求筛选 (web-xml)。


在pom.xml中编码:

  org.apache.maven.plugins maven-compiler-plugin ...  1.6 1.6 ${project.build.sourceEncoding}    org.apache.maven.plugins maven-resources-plugin ...  ${project.build.sourceEncoding}   ...  UTF-8  

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

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

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

和:

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

现在:

在pom.xml中传递后一个选项是没有办法可知的。

这是一个待定的答案: 为clojure源文件启用UTF-8编码