Вопрос по java – Сервлет получает странный персонаж с американской международной клавиатурой на Mac
У меня есть простая форма, где я могу напечатать некоторые символы. Эти символы отправляются сервлету, который выполняет getBytes и печатает байты. Правильные байты UTF-8 для символа & # xE3; & quot; -61 и -93, но я получаю -52 и -93. :(
Я перепробовал все, чтобы понять и исправить это, но ничего не получалось. Все на моей машине должно быть UTF-8, поэтому я подозреваю, что это связано с клавиатурой US International, которую я использую в течение 20 лет.
Есть ли у какой-нибудь умной души подсказка, откуда взялись -52 и -93?
ИСПРАВЛЕНО на причале: см. Мой ответ ниже.
Сломано на Tomcat:Как заставить tomcat понять кодировку MacRoman (x-mac-roman) с моей клавиатуры Mac?
getBytes()
в строке не очень хороший способ определить, что былона самом дел послал. Используйте Wireshark или что-то подобное.
после 8 часов (серьезно!) Похоже, что единственный способ заставить это работать правильно - это сделать:
Одной из проблем было: плохая компиляция кодовых файлов компиляции файлов классов.
export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
mvn clean install
А ТАКЖЕ
<%@page pageEncoding="UTF-8" %>
В НАСТОЯЩЕЕ ВРЕМЯ
Нет способа узнать последний вариант в вашем pom.xml.
Вот ожидающий ответ на этот вопрос: включение кодировки UTF-8 для исходных файлов clojure
Mac OS Римская кодировка символов. (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-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>
request.getEncoding()
?
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
может быть последним средством.