Почему символы UTF-8 не отображаются правильно на этой веб-странице (сгенерированной с помощью JSoup)? - PullRequest
1 голос
/ 01 августа 2011

У меня проблемы с работой с Charsets при разборе и отрисовке страницы с использованием библиотеки JSoup. Вот пример страницы, которую она отображает:

http://dl.dropbox.com/u/13093/charset-problem.html

Как видите, где должны быть 'символы,? вместо этого отображается (даже при просмотре исходного кода).

Эта страница создается путем загрузки веб-страницы, анализа с помощью JSoup, а затем повторного рендеринга, после внесения некоторых структурных изменений.

Я загружаю страницу следующим образом:

final Document inputDoc = Jsoup.connect(sourceURL.toString()).get();

Когда я создаю выходной документ, я делаю это следующим образом:

outputDoc.outputSettings().charset(Charset.forName("UTF-8"));
outputDoc.head().appendElement("meta").attr("charset", "UTF-8");
outputDoc.head().appendElement("meta").attr("http-equiv", "Content-Type")
            .attr("content", "text/html; charset=UTF-8");

Кто-нибудь может подсказать, что я делаю не так?

edit: обратите внимание, что исходной страницей является http://blog.locut.us/, и, как вы увидите, она отображается правильно

Ответы [ 2 ]

4 голосов
/ 01 августа 2011

Знаки вопроса типичны, когда вы пишете символы в выходной поток ответа, которые не охватываются кодировкой символов ответа. Вы, кажется, полагаетесь на кодировку символов платформы по умолчанию при обслуживании ответа. Заголовок Content-Type ответа вашего сайта также подтверждает это отсутствующим атрибутом charset.

Предполагая, что вы используете сервлет для обслуживания измененного HTML, вам следует использовать HttpServletResponse#setCharacterEncoding() для установки кодировки символов перед выводом измененного HTML.

response.setCharacterEncoding("UTF-8");
response.getWriter().write(html);
0 голосов
/ 01 августа 2011

Скорее всего, проблема заключается в чтении страницы ввода, вам также необходимо иметь правильную кодировку для источника.

...