Недавно я установил Winamp Song Requester, который представляет собой подключаемый модуль запроса песен Winamp со встроенным минимальный HTTP CGI-сервер.
Что плагин делает, так это то, что он запускает веб-сервер, обслуживает html-страницу с некоторыми специальными переменными, которые он заменяет фактическими данными по запросу (плейлист, очередь запросов, оставшееся время в песне и т. д.).
Я увидел в этом забавный и хороший проект для изучения jQuery, поэтому я начал подключать свой собственный код js, чтобы заменить, исправить и ajaxify обслуживаемый веб-сайт из плагина, но теперь я столкнулся с проблемой с кодировкой символов.
На странице вы получаете ссылки на все песни в плейлисте. Когда вы нажимаете на одну из ссылок, я подключаю свою собственную функцию щелчка jQuery. Поэтому вместо перезагрузки всей страницы, когда вы запрашиваете песню, я делаю $.get($(this).attr('href', function(response) {... code ...})
, а затем использую replaceWith, чтобы заменить текущую очередь новой сгенерированной очередью с вашим запросом, добавленным на лету. Я делаю то же самое, чтобы показать/обновить текущую игру и поиск, чтобы все загружалось в фоновом режиме, а затем заменялось на лету добавлением некоторых анимаций.
Все jQuery/Ajax отлично работают, но у меня большая проблема с кодировкой и именами песен в очереди/плейлисте. Специальные символы (рати и т. д.) в именах вообще не работают.
Плагин выводит все в формате iso-8859-1/latin1, а мой метатег в разметке сообщает браузеру, что это страница latin1. При обычном обновлении страницы в браузере это работает хорошо, и специальные символы отображаются как обычно. Но когда я использую jQuery и $.get()
для замены блоков кода на лету, специальные символы отображаются только как ?.
Я думаю, что проблема заключается в том, что jQuery по умолчанию считает, что ответ $.get()
является UTF-8, если в заголовке не указано иное. Плагин вообще не устанавливает никаких заголовков для кодировки/кодировки, и, поскольку я вообще не контролирую бэкэнд и какие заголовки устанавливаются, я не могу это изменить.
Единственные заголовки, которые я получаю в ответе от плагина:
Сервер: WinampServer
Соединение: close
Content-Type: text/html
Надеюсь, вы понимаете мою проблему. У меня есть страница, на которой я вообще не контролирую серверную часть, и все, с чем мне приходится работать, это сгенерированный HTML. Я не могу изменить или добавить заголовки в ответы. Мне нужно сообщить jQuery, что ответ на самом деле в latin1, а не в UTF-8, чтобы кодировка специальных символов не нарушалась. Я пробовал scriptCharset: 'iso-8859-1' в jQuerys ajaxSetup, но это работает только с типом script/json, и я работаю с ответами HTML.
Любая идея, возможно ли это, или любой другой обходной путь, о котором вы могли бы подумать?