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

chr*_*tek 4 java servlets character-encoding special-characters

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

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

有没有聪明的灵魂从-52和-93来自何处?

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

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

Joo*_*gen 9

那是Mac OS Roman字符编码.(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">

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

在Web应用程序中设置请求筛选(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>
Run Code Online (Sandbox Code Playgroud)