Я делаю работу для французского клиента, поэтому мне нужно иметь дело с акцентированными персонажами. Но я сталкиваюсь с большими трудностями, я надеюсь, что решение будет простым и что кто-нибудь может указать на меня.Специальные и акцентированные символы
Строка: La Forêt pour Témoin
преобразуется в: La For? pour T?oin
Примечание недостающий символ после акцентированного персонажа - т после ê и м после Шахматный.
Я пробовал использовать StringEscapeUtils, который успешно удалял некоторые символы, такие как ă. Я также создал свою собственную функцию эвакуации, которая дает те же результаты (ă будет работать, ê не будет).
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.
Любая помощь приветствуется.
EDIT: Я обнаружил, что строка неверна при простом отображении параметра запроса из формы. (т. е. 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 они отображаются как задумано.
EDIT: Я также добавил <?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»).
Не то, что это решит проблему, но это хорошо читать: http://www.joelonsoftware.com/articles/Unicode.html –
Если параметры запроса в результате отправки формы являются неправильными, то браузер определенно пытается использовать автообнаруженный набор символов, который не может представлять символы с акцентом. Попробуйте добавить: ' Xml version =" 1.0 "encoding =" UTF-8 "?>' В самом начале документа, которому не предшествуют никакие пробелы; они должны быть первыми символами документа XHTML. –