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编码