Специальные и акцентированные персонажи - PullRequest
3 голосов
/ 22 июня 2010

Я делаю какую-то работу для французского клиента, поэтому мне нужно иметь дело с акцентированными символами.Но я сталкиваюсь с большими трудностями, я надеюсь, что решение простое и что кто-то может указать мне на это.

Строка: 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").

Ответы [ 4 ]

6 голосов
/ 23 июня 2010

РЕДАКТИРОВАТЬ: Я обнаружил, что строки искажены при простом отображении параметра запроса из формы.(т. е. request.getParameter ("string") уже имеет некорректное содержимое).

Это может иметь три причины:

  1. Это запрос GET иСервер не настроен на использование UTF-8 для анализа URI запроса.Неясно, какой сервер вы используете, поэтому вот пример ответа, нацеленного на Tomcat: установите URIEncoding атрибут HTTP Connector в /conf/server.xml в UTF-8.

  2. Если это запрос POST, вам необходимо убедиться, что сервлет-контейнер использует UTF-8 для кодирования тела запроса.Вы можете сделать это заранее request.setCharacterEncoding("UTF-8").

  3. Консоль, для которой вы записываете параметр, не поддерживает UTF-8.Непонятно, о какой консоли вы говорите, поэтому вот пример ответа, нацеленного на Eclipse: в Окно> Настройки> Общие> Рабочая область> Кодировка текстового файла установите его в UTF-8.

См. Также :

1 голос
/ 23 июня 2010

Вы должны убедиться, что HTML-код, отправляемый обратно в браузер, имеет кодировку. Вы оба должны отправить обратно Content-Type: text/html; charset=UTF-8 в качестве заголовка ответа HTTP и включить в качестве первого дочернего элемента тега head:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

Или, если вы используете XHTML:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Хотя наличие тега meta часто решает проблему.

Кроме того, убедитесь, что ваш HTML-код действителен, используя Служба проверки разметки W3C .

См. Также: FAQ: вместо акцентированных символов появляются странные символы и знаки вопроса

1 голос
/ 23 июня 2010

Хорошо, первая проблема в том, что вам нужно выяснить, где теряются данные.

  • Добавьте соответствующую регистрацию символов Unicode (в идеале в шестнадцатеричном формате), чтобы вы могли видеть, можете ли вы писать в SQLite и получать данные правильно.
  • Жесткий код некоторых данных, чтобы вы могли видеть, возвращаются ли они правильно
  • Убедитесь, что в любом месте у вас есть преобразование текста в двоичное, вы указываете соответствующую кодировку (например, UTF-8)

Вы на самом деле не сказали , где все идет не так, но я ожидаю, что если вы разберетесь с кодировкой символов, все остальное должно встать на свои места. Может быть У SQLite есть проблемы, но я сомневаюсь в этом ...

0 голосов
/ 23 июня 2010

Возможно ли, что строка в такте, но вы пытаетесь напечатать эти символы с en-us локализацией?

...