Прежде чем начать, я хотел бы выделить структуру того, с чем я работаю.
- Существует текстовый файл, из которого взят определенный текст. Файл закодирован в utf-8
- Perl берет файл и печатает его на странице. Все отображается так, как должно быть. Perl настроен на использование utf-8
- Веб-страница, которую генерирует Perl, имеет следующий заголовок
<meta content="text/html;charset=utf-8" http-equiv="content-type"/>
. Следовательно это utf-8
- После первой загрузки все загружается динамически через jQuery / AJAX. Пролистывая страницы, можно загрузить точно такой же текст, только на этот раз он загружается JavaScript. Запрос имеет следующий заголовок
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
- Обработчик Perl, который обрабатывает AJAX-запрос на серверной части, доставляет содержимое в utf-8
- AJAX-обработчик вызывает функцию в нашей пользовательской платформе. Перед тем, как Framework выводит на печать текст, он правильно отображается как «üöä». После отправки в обработчик AJAX он читает «x {c3} \ x {b6} \ x {c3} \ x {a4} \ x {c3} \ x {bc}", что является представлением utf-8 для " UOA».
- После того, как обработчик AJAX доставит свой пакет клиенту в формате JSON, на веб-странице будет напечатано следующее: «Ã¶Ã¤Ã¼».
- Сами файлы JS и Perl сохраняются в utf-8 (настройка по умолчанию в Eclipse)
Это симптомы. Я попробовал все, что Google сказал мне, и у меня все еще есть проблема. Кто-нибудь знает, что это может быть? Если вам нужен какой-то конкретный фрагмент кода, сообщите мне об этом, и я постараюсь вставить его.
Редактировать 1
Заголовок ответа от обработчика AJAX
Date: Mon, 09 Nov 2009 11:40:27 GMT
Server: Apache/2.2.10 (Linux/SUSE)
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset="utf-8"
200 OK
Ответ
С помощью вас, ребят и этой страницы, я смог отследить проблему. Похоже, проблема была не в самой кодировке, а в Perl, кодирующей мою переменную $ text в два раза больше, чем в utf-8 (по данным сайта). Решение было так же просто, как добавление Encode :: decode_utf8 ().
Я искал в совершенно неправильном месте для начала. Я благодарю всех, кто помог мне искать в нужном месте :)
# распространяет некоторую возлюбленную любовь #