Как объявить кодировку символов в файле INDIVIDUAL JS? - PullRequest
15 голосов
/ 12 января 2012

Мы можем объявить кодировку символов в ИНДИВИДУАЛЬНОМ файле CSS с помощью следующих кодов:

@charset "UTF-8";

Мой вопрос:

Как объявить кодировку символов вИНДИВИДУАЛЬНЫЙ файл JS?

Если я отправлю файл JS своему другу, я надеюсь, что он (она) сможет понять кодировку символов этого файла JS из самих кодов, когда он (она) начнет просматривать или редактировать этот файл JS.

Спасибо!

Ответы [ 3 ]

14 голосов
/ 12 января 2012

Вы не можете.Однако вы можете определить его в теге script , который переносит файл на страницу, используя атрибут charset .Это должно соответствовать charset, если оно есть, в Content-Type, с которым вы обслуживаете файл.Цитата:

Атрибут charset дает кодировку символов внешнего ресурса сценария.Атрибут не должен указываться, если атрибут src отсутствует.Если атрибут установлен, его значение должно быть допустимым именем кодировки символов, должно быть ASCII без учета регистра совпадения для предпочтительного имени MIME для этой кодировки и должно соответствовать кодировкеуказывается в параметре charset метаданных Content-Type внешнего файла, если таковые имеются. [IANACHARSET]

Повторное редактирование:

Если я отправлю файл JS своему другу, я надеюсь, что он (она) сможет это понятьКодировка символов JS-файла из самих кодов, когда он (она) начинает просматривать или редактировать этот JS-файл.

Для этого вам, скорее всего, придется просто сказать ему / ей.Если файл находится в формате UTF-8 или Windows-1252 или ISO 8859-1, к сожалению, в коде нет доступного индикатора кодировки, поэтому я бы добавил в начале комментарий в виде строк:

// Encoding: UTF-8

Если вы используете UTF-16 или UTF-32, вы должны сказать своему редактору использовать BOM , которую другие редакторы должны видеть и понимать (если ониРедакторы с поддержкой Unicode).Обычно это применимо только в том случае, если вы пишете свои комментарии на тексте (языке), требующем большого количества многобайтовых символов, и если у вас высокое отношение комментариев к коду (поскольку код написан с использованием западного текста), хотя, конечно,вы можете использовать любую кодировку, которая вам нравится.Просто если отношение комментариев к коду низкое, вам, вероятно, лучше придерживаться UTF-8, даже если комментарии находятся в тексте, требующем большого количества четырехбайтовых символов, поскольку для кода требуется только один байт на символ,(Принимая во внимание, что в UTF-16 у вас может быть больше двухбайтовых вместо четырехбайтовых символов в ваших комментариях, но код всегда будет требовать два байта на символ; а в UTF-32, четыре байта на символ. Таким образом, в целомфайл может быть больше, хотя комментарии занимают меньше места, но здесь я, вероятно, расскажу вам вещи, которые вы уже знаете гораздо лучше, чем я, если я правильно угадываю ваши причины вопроса.)

3 голосов
/ 21 мая 2014

Если вы хотите указать кодировку файла понятным для человека способом, идея TJ Crowder (добавление комментария к файлу, например // Encoding: UTF-8) - это просто вещь.И как указал Юкка К. Корпела , вы также можете использовать спецификацию.

Но если вы хотите, чтобы машиночитаемый способ указывать кодировку, которая объявлена ​​в документе, естьпара других способов:

Например, на сервере Apache httpd вы можете использовать любое из следующих объявлений:

  1. AddDefaultCharset UTF-8
  2. AddCharset UTF-8 .js
  3. AddType 'application/javascript; charset=UTF-8' js*

* Я не заинтересован в обосновании использования "application/javascript" сверх "text/javascript".Но если вам интересно знать, почему один или другой может быть предпочтительнее, ср.https://stackoverflow.com/a/4101763/1070047. Однако, учитывая тему, application/javascript кажется вполне уместным (особенно, если вы собираетесь использовать спецификацию, поскольку это указывает на то, что код должен рассматриваться как двоичный файл).

Есликод будет интерпретирован / обработан / скомпилирован на стороне сервера (например, PHP), вы можете установить заголовки в документе, например…

header("Content-Type: application/javascript; charset=utf-8");

По крайней мере в PHP, обязательно добавьте этот оператор заголовка перед любымпроисходит вывод.

Наконец, при определении, какую декларацию использовать, учтите, что (при понимании / соблюдении, т. е. не в IE) спецификация имеет большие полномочия, чем заголовки документов.И оба имеют приоритет над объявлениями связанных / исходных кодировок (например, <script type="application/javascript" src="script.js" charset="utf-8"></script>).

3 голосов
/ 12 января 2012

Не существует JavaScript-конструкции для объявления кодировки в самом файле, как это можно сделать в CSS.Кодировка должна быть сообщена получателям при доставке данных.При отправке файлов в виде вложений электронной почты ваша программа электронной почты может включать или не включать их в заголовки Content-Type, которые указывают кодировку (но может быть трудно определить, какая кодировка может быть).

Также можно указать метку порядка байтов в начале файла в кодировке UTF-8.Хотя в UTF-8 нет проблемы порядка следования байтов, спецификация выступает в качестве полезного индикатора - файл, который начинается с байтов, составляющих спецификацию в кодировке UTF-8, скорее всего, кодируется в UTF-8.Вот почему программы могут выводить кодировку при отсутствии других указаний.Это, конечно, не на 100% надежно, но полезно.

Многие текстовые редакторы имеют возможность сохранить ваш файл как «UTF-8, закодированный с помощью спецификации».

(В Интернетестраниц, спецификация когда-то рассматривалась как риск, поскольку браузеры рассматривали ее как символьные данные. В наши дни спецификация даже в UTF-8 полезна, а не риск.)

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