Кодировка символов file:///
URL работает по-разному в разных браузерах в Windows.
Имена файлов Windows изначально основаны на Unicode, поэтому при использовании URL-адреса, основанного на байтах, он должен преобразовать эту последовательность байтов в символы Unicode, используя кодировку. Какая кодировка? Там нет стандарта, чтобы сказать, но есть две очевидные возможности:
UTF-8, поскольку он охватывает все и является популярной кодировкой по умолчанию, также используемой стандартом IRI для помещения Unicode в URI;
(ошибочно названная) кодовая страница «ANSI», которая является произвольным значением по умолчанию, которое варьируется от системы к системе. При установке Windows в Западной Европе это будет кодовая страница 1252 (аналогично ISO-8859-1); при установке на китайском Windows это будет кодовая страница 936 (аналогично GB2312).
Кодовая страница ANSI - это боль, потому что вы никогда не знаете, что это будет, это никогда UTF-8, и если ваше имя файла содержит символы, которых нет в ANSI - что, безусловно, будет в случае, если у вас есть имя 徘吐驴欸觰.bmp
при установке в Windows, вы не можете получить доступ к файлу вообще.
Так что же используют браузеры?
- IE: кодовая страница ANSI
- Safari / Opera: UTF-8
- Chrome / Firefox: UTF-8, если байты не являются допустимой последовательностью UTF-8, и в этом случае вместо них используется кодовая страница ANSI.
Итак, в заключение, вы не можете надежно использовать не-ASCII символы в файле: /// URL-адреса вообще.
Это в отличие от HTTP. Например, веб-сервер IIS работает так же, как и Chrome и Firefox, с UTF-8 с резервным переключением на ANSI. Символы, не входящие в ASCII через IRI и соответствующим образом настроенный сервер, подходят, но не для локальной файловой системы.
(На платформах, отличных от Windows, имена файлов являются байтами, обычно представляющими символы в кодировке UTF-8, но все же байтами. Oo Нет никакой неоднозначности между именами файловой системы и байтовым URL% -последовательности.)
die Кодовая страница ANSI die. Почему Microsoft не убьет тебя? Вы давно просуществовали. Вы все разрушаете.