Странная проблема с акцентом xml/html

У меня есть файл XML, содержащий сообщение с тегами html. Файл XML читается классом Java, который отправляет его людям. Когда почта получена, акценты не отображаются. Например, é не отображается.

Я пробовал é в xml, но в eclipse выдает ошибку, говорящую, что объект не был объявлен.

Я также пытался просто вставить é, но это ничего не показывает в окончательном выводе.

Третье, что я пробовал, это использовать <![CDATA[é]]>, но это сломало синтаксический анализатор, так как он ничего не выводил после него.

Однако я заметил нечто странное. Когда я помещаю что-то подобное в xml и добавляю кодировку UTF-16

<message>text bla bla blaa é&lt; 

он вывел é в конце, как это bla blaa blaa blaa é.

EDIT <message>text bla bla blaa éé&lt; выводит ?é или только один é

Файл выглядит примерно так:

<?xml version="1.0"? encoding="UTF-16">

<message>
&lt;b&gt;hello é &lt;/b&gt;
</message>
</xml>

Что дает?


person Ayrad    schedule 30.03.2010    source источник


Ответы (3)


Вы пробовали изменить кодировку на UTF-8?

person William Witter da Silva    schedule 30.03.2010
comment
Сначала я попытался с XML-файлом в UTF-8 и переключил его на UTF-16. - person Ayrad; 30.03.2010

Ключ кодировки, который вы указываете в теге, ДОЛЖЕН соответствовать «реальной» кодировке, которая использовалась для редактирования и сохранения файла xml на вашем жестком диске.

Если вы отредактировали свой xml-файл в какой-либо европейской стране под Windows с помощью блокнота, он наверняка будет закодирован в cp1252 (кодировка по умолчанию, используемая Windows в такой ситуации, учитывая, что cp1252 является небольшим вариантом нормализованного ISO8859-1, чтобы включить знак евро ).

На самом деле я бы предложил использовать инструмент редактирования, который позволяет вам точно контролировать, какая кодировка будет использоваться во время операций редактирования/сохранения (например, http://jedit.org), поэтому вы можете гарантировать, что действующая кодировка файла и заданная кодировка в его содержимом (так сказать, в теге) совпадают.

РЕДАКТИРОВАНИЕ
Это также сильно зависит от того, как ваша java-программа читает xml-файл и использует его. Если используется парсер xml, все должно быть в порядке. В противном случае вам, вероятно, придется использовать кодировку ISO-8859-1 для хранения файла, поскольку это кодировка чтения по умолчанию, используемая java. Если вам очень не повезло, и для процесса чтения файла в классе java используется другая кодировка, вам придется соответствовать этому...

EDIT 2
Это также зависит от почтового клиента и способа, которым он управляет кодированием...

person Michael Zilbermann    schedule 30.03.2010
comment
+1 перестаньте пытаться найти обходные пути для ваших проблем с кодировкой, исправьте их! - person Michael Borgwardt; 30.03.2010
comment
Я сделал message = message.replaceAll(é, ); прямо во время генерации html. Кажется, это работает, но похоже на обходной путь: | - person Ayrad; 31.03.2010

Объект представляет собой объект html, который ваш анализатор xml пытается интерпретировать. Замените &eacute; на &amp;eacute;, и синтаксический анализатор xml будет интерпретировать только &amp;, который генерирует нужный объект html.

Что касается кодировки UTF-16, ключевой частью информации, отсутствующей здесь, является кодировка файла. Похоже, что файл сохраняется в формате UTF-16 без метки порядка байтов, что объясняет, почему он работает только с указанной кодировкой. Вы можете убедиться в этом, проверив размер файла: он будет вдвое превышать количество символов в файле (или, возможно, немного больше, если вы используете определенные символы Юникода). Другими вероятными кодировками, которые вы можете попробовать, являются UTF-8 и iso-8859-1.

person ataylor    schedule 30.03.2010