Я делаю какую-то работу для французского клиента, поэтому мне нужно иметь дело с акцентированными символами.Но я сталкиваюсь с большими трудностями, я надеюсь, что решение простое и что кто-то может указать мне на это.
Строка: La Forêt pour Témoin
преобразуется в: La For? pour T?oin
Обратите внимание на отсутствующий символ после акцентированного символа - t после ê и m после é .
Я пытался использовать StringEscapeUtils, который успешно экранировал некоторые символы, такие как ă .Я также создал свою собственную функцию escape, которая дает те же результаты ( ă будет работать, ê не будет).
private String escapeChars(String string) {
char[] chars = string.toCharArray();
String result = "";
for (int i = 0; i < chars.length; i++) {
int c = chars[i];
result += "&#" + c + ";";
}
return result;
}
Проект выполняется в затмениииспользуя плагин App Engine, я не могу определить, вызвана ли проблема Java, App Engine или SQLite.
Любая помощь приветствуется.
РЕДАКТИРОВАТЬ: Iобнаружили, что строка искажена при простом отображении параметра запроса из формы.(т. е. request.getParameter ("string") уже имеет некорректное содержимое).
Я попытался использовать метатег, предложенный Дэниелом, безуспешно.Я думаю, что вы на правильном пути, однако, данные заголовка html-документа выглядят следующим образом:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Когда акцентированные символы жестко запрограммированы в JSP, они отображаются так, как задумано.
РЕДАКТИРОВАТЬ: Я также добавил <?xml version="1.0" encoding="UTF-8"?>
в самом начале страницы.
Я очень близок к решению.Я обнаружил, что если я изменяю кодировку страницы из формы браузера, данные передаются на сервер должным образом.Я не могу понять, как сделать так, чтобы браузер автоматически определял кодировку страницы.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
РАЗРЕШЕНО: Я не мог понять, как заставить браузер автоматически определять кодировку UTF-8, котораяJava по умолчанию.Поэтому я принудительно ввел кодировку символов в ISO-8859-1, используя request.setCharacterEncoding ("ISO-8859-1").