2008-12-01 4 views
6

Я недавно установил Winamp Song Requester, являющийся плагином для повторного использования веб-песен Winamp со встроенным минимальным HTTP CGI-сервером.

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

Я видел это как забавный и хороший проект, чтобы изучить некоторые jQuery, поэтому я начал подключать свой собственный js-код для замены, исправления и ajaxify обслуживаемого веб-сайта из плагина, но теперь у меня возникла проблема с кодировкой символов ,

На странице вы получаете ссылки на все песни в плейлисте. Когда вы нажимаете на одну из ссылок, я подключил собственную функцию jQuery click. Поэтому вместо перезагрузки всей страницы, когда вы запрашиваете песню, я делаю $ .get ($ (this) .attr ('href', function (response) {... code ...}), а затем я использую replaceWith для замените текущую очередь новой сгенерированной очередью, добавив ваш запрос «на лету». Я делаю то же самое, чтобы показывать/обновлять текущую игру и поиск, чтобы все получилось в фоновом режиме, а затем заменено «на лету» с добавлением некоторых анимаций.

все JQuery/Ajax работает, но большая проблема у меня есть, с кодировкой и название песни в очереди/воспроизведения. Специальные символы (åäöé и т.д.) в именах не работает.

плагин выводит все в iso-8859-1/latin1, а мой метатег в разметке сообщает браузеру, что эта страница является латинской 1. На обычном обновлении страницы в e браузер работает хорошо, а специальные символы отображаются как обычно. Но когда я использую jQuery и $ .get() для замены блоков кода на лету, специальные символы отображаются только как.

Я думаю, что проблема заключается в том, что по умолчанию jQuery полагает, что ответ $ .get() - это UTF-8, если ни один заголовок не говорит иначе. Плагин не устанавливает никакого заголовка для кодировки/кодировки вообще, и поскольку у меня нет никакого контроля над всем файлом и какие заголовки установлены, я не могу это изменить.

Единственные заголовки, которые я получаю в ответ от плагина:

Сервер: WinampServer
Подключение: закрыть
Content-Type: Текст/HTML

Я надеюсь, вы понимаете, моя проблема. У меня есть страница, на которой у меня нет контроля над бэкэнд, и все, с чем я должен работать, - это созданный HTML. Я не могу изменить или добавить заголовки в ответах. Мне нужно сообщить jQuery, что ответ на самом деле находится в latin1, а не в UTF-8, так что кодировка специальных символов не прерывается. Я пробовал сценарийCharset: 'iso-8859-1' в jQuerys ajaxSetup, но работает только с типом script/json, и я работаю с ответами HTML.

Любая идея, если это возможно или любое другое обходное решение, о котором вы могли подумать?

ответ

28

редактировать: Хорошо, я думаю, что это работает (по крайней мере, она работала в моей тестовой среде см пересмотров для предыдущей попытки)

$.ajaxSetup({ 
    'beforeSend' : function(xhr) { 
     xhr.overrideMimeType('text/html; charset=UTF-8'); 
    }, 
}); 
$('#stuff').load('/yourresource.file'); // your ajax load 

то, что я имел, был основной набор файлов в UTF-8 и файле данных установлен в ISO-8859-1. без вышеуказанного кода я получил кучу мусора для тестовой строки åäöé, как и ожидалось.с вышеуказанным кодом он загрузил åäöé правильно закодирован.

+0

Я тоже пробовал, но это, похоже, не помогает. Я думаю, что только кодирует данные, которые вы отправляете, а не кодировку данных, полученных в ответ. – 2008-12-01 10:03:06

0

Во-первых, было бы лучше, если бы вы использовали более общую функцию $ .ajax().

В соответствии с documentation существует опция scriptCharset, однако она применима только в определенных типах данных. Также указано, что это необходимо, только если кодирование вызывающей страницы отличается.

0

Это просто указание, что хотя метод overrideMimeType() доступен в браузерах на основе Gecko (Firefox, ...), он НЕ находится в IE (не менее < = 7), и, похоже, нет обходного пути. (Я не знаю о доступности в других браузерах.)