Проблема с символами JavaScript при заполнении выпадающего списка с помощью jQuery из внешнего файла JS - PullRequest
1 голос
/ 09 ноября 2009

Я сталкиваюсь с проблемой кодировки символов при загрузке раскрывающегося списка с помощью jQuery из внешнего файла js. Кажется, что это происходит только тогда, когда объект JavaScript находится за пределами страницы.

Например, ниже приведен объект JavaScript.

var langs = [
  {value:'zh-CN', text:'中文 (简体) Chinese Simplified'},
  {value:'en', text:'English'},
  {value:'eo', text:'EsperAnt'},
  {value:'es', text:'Español'},
  {value:'ja', text:'日本語 (Japanese)'},
  {value:'pt-PT', text:'Português'},
  {value:'ru', text:'Русский (Russian)'},
 ];

Если это на моей странице с правильными метатегами <meta http-equiv="content-type" content="text/html; charset=utf-8" />, то приведенный ниже код работает.

$(document).ready(function() {
                // Fill language select
                $.each(langs, function(i, j){  
     $('#LangSelect').append($("<option></option>").attr("value",j.value).text(j.text));
                });

Но, поскольку мне нужны языки на более чем одной странице, я переместил объект langs во внешний файл js и сослался на него. После этого я сталкиваюсь с проблемами кодирования, например русские символы становятся русскими.

Эта проблема с кодировкой, похоже, все еще возникает, даже если ссылка на внешний файл js установлена, как показано ниже:

<script type="text/javascript" charset="UTF-8" src="externalJS.js"></script>

Есть ли способ принудительно загрузить объект JavaScript с правильной кодировкой из внешнего файла?

Обратите внимание, что у меня возникают эти проблемы при просмотре содержимого в браузере iPhone Mobile Safari. Кроме того, эти страницы просто HTML и JavaScript без каких-либо серверных компонентов.

Заранее спасибо, Ben

Ответы [ 2 ]

0 голосов
/ 09 ноября 2009

Есть ли способ принудительно загрузить объект JavaScript с правильной кодировкой из внешнего файла?

Да, атрибут script charset, как вы указали. Однако исторически это не сработало повсюду, и на него лучше не полагаться. Если это не поддерживается, браузер всегда будет использовать кодировку главной страницы в качестве кодировки в сценарии. Поэтому, если вы включите параметр кодировки UTF-8 на главной странице, все будет в порядке в любом случае.

Я удивлен, если современный браузер, такой как Mobile Safari, не понимает этого.

Возможно, ваш сервер обслуживает файлы .js с неправильным заголовком Content-Type, содержащим неправильную кодировку? Сочетание неустановленных mime-типов для JS и AddDefaultCharset в Apache может оставить вас с:

Content-Type: text/plain;charset=iso-8859-1

Что может иметь эффект испортить его.

0 голосов
/ 09 ноября 2009

Убедитесь, что вы сохранили файл JavaScript с использованием кодировки UTF-8. Если вы откроете файл в Notepad ++, то можете нажать «Формат»> «Кодировать в UTF-8» (если вы попробуете «Формат»> «Преобразовать в UTF-8», посмотрите на страницу с помощью шестнадцатеричного редактора. Иногда вы сталкиваетесь с каким-то странным символы в начале файла).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...