Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Кодировка UserJS для Opera (https://javascript.ru/forum/misc/36150-kodirovka-userjs-dlya-opera.html)

jsjob 05.03.2013 13:31

Кодировка UserJS для Opera
 
Подключил скрипт к Опере
function fLoad()
{ alert("Работает!");
  return true;
}
function fUnLoad()
{ alert("Не-Работает!");
  return true;
}

onload=fLoad;
onunload=fUnLoad


Если файл сохранять в UTF-8 или UTF-16, то работает, если сохранять в Win-1251 или KOI-8U, то перестаёт работать.

Я рассчитывал, что будут кроказябры в окне Алерта.

1 - Почему не работает если использована другая кодировка?
2 - Где/как определяется кодировка подключаемого скрипта?
2.1 - или какая она д.б. и как Опера различает UTF-8/16?

Спасибо

danik.js 05.03.2013 13:37

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

jsjob 05.03.2013 13:46

"на фига" оно не важно. Просто хочу разобраться как Опера работает. Вот почему она различает UTF-8 и UTF-16?

danik.js 05.03.2013 13:51

Дружок, ты хотя бы минимальные усилия приложил для понимания этого.
http://ru.wikipedia.org/wiki/UTF-16
Цитата:

Для определения порядка байтов используется метка порядка байтов (англ. Byte order mark). В начале текста записывается код U+FEFF. При считывании, если вместо U+FEFF считалось U+FFFE, значит порядок байтов обратный, поскольку символа с кодом и U+FFFE в Юникоде нет. Так как в кодировке UTF-8 не используются значения 0xFE и 0xFF, можно использовать метку порядка байтов как признак, позволяющий различать UTF-16 и UTF-8.

jsjob 05.03.2013 14:10

Спасибо. Про BOM я знаю, но не ожидал использования в данном случае - отказ от прямого указания кодировки делает систему менее гибкой.

danik.js 05.03.2013 14:15

BOM позволяет однозначно определить кодировку. Что в этом плохого?

jsjob 05.03.2013 14:56

Плохо только то, что BOM не позволяет определять не-Юникод :)

danik.js 05.03.2013 15:03

Ну логично. Ибо не-юникод - это однобайтовые кодировки, и в них не нужны никакие Byte Order Mark


Часовой пояс GMT +3, время: 23:26.