Java Servlet在Mac上使用美国国际键盘获得奇怪字符

Java Servlet在Mac上使用美国国际键盘获得奇怪字符,java,servlets,character-encoding,special-characters,Java,Servlets,Character Encoding,Special Characters,我有一个简单的表格,可以输入一些字符。这些字符被发送到servlet,servlet执行getBytes并打印字节。“ã”的正确UTF-8字节是-61和-93,但我得到了-52和-93( 我想尽一切办法来理解和修复这个问题,但没有任何效果。我机器上的所有东西都应该是UTF-8,所以我怀疑这与我使用了20年的美国国际键盘有关 有哪个聪明的灵魂知道-52和-93是从哪里来的吗 固定在码头上:见下面我的答案 在Tomcat上中断:这是(0xBB==-52) 一些需要检查的事项: getBytes(字

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

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

有哪个聪明的灵魂知道-52和-93是从哪里来的吗

固定在码头上:见下面我的答案

在Tomcat上中断:

这是(0xBB==-52)

一些需要检查的事项:

  • getBytes(字符串,“UTF-8”)
    新字符串(字节,“UTF-8”)
  • 表单应该以UTF-8的形式发送:
    response.setContentType(“text/html;charset=“UTF-8”);
    。以JSP

所有这些都没有帮助:

在web应用程序(web xml)中设置


在pom.xml中编码:


org.apache.maven.plugins
maven编译器插件
...
1.6
1.6
${project.build.sourceEncoding}
org.apache.maven.plugins
maven资源插件
...
${project.build.sourceEncoding}
...
UTF-8
好的,在整整8个小时(严重!)之后,看起来要让它正常工作,唯一的方法是:

其中一个问题是:类文件编译的maven构建编码错误

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


现在:

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


这里有一个悬而未决的答案:

调用
getBytes()
字符串不是确定实际发送内容的好方法。请使用Wireshark或类似工具。谢谢Joop,但它不起作用。我的猜测是,无论我做什么,web容器都会得到Mac OS Roman,并且不知道如何处理它。我的浏览器编码设置为UTF-8:(作为“页面信息”)您可能会看到实际的编码。accept字符集可以在“页面源代码”中看到。后者可能已被遗忘。或者您可能有一个非常旧的浏览器。也许
可能是最后的选择。有趣的是,对于一个字符,您可以得到两个字节,因此UTF-8已经完成(尽管错误)。但是在某个地方你得到了Mac Roman,ISO-8859-1到UTF-8的转换完成了。你用不同的浏览器尝试过吗?你跟踪了
请求。getEncoding()
?我做了你建议的一切。我在servlet中得到的字符串的System.out.println。它打印不正确。在Jetty和Tomcat上测试过:(
export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
mvn clean install
   <%@page pageEncoding="UTF-8" %>