IE7 не будет отображать bmp файлы с закодированными именами файлов - PullRequest
2 голосов
/ 14 июля 2011

У меня есть тестовая страница, которая отображает два изображения.Один называется hello.bmp, а другой - 徘 吐 驴 欸 觰 .bmp (это случайная коллекция китайских иероглифов - извинения, если это означает что-то странное).Для последнего изображения я использую кодированный формат в HTML-коде страницы.

HTML-код довольно прост:

<img src="%E5%BE%98%E5%90%90%E9%A9%B4%E6%AC%B8%E8%A7%B0.bmp" />
<img src="hello.bmp" />

В Internet explore 7 закодированный путь к файлу не отображается (красныйИкс).Все остальные браузеры отображают его.

Кто-нибудь знает, что может вызвать это?Можно ли этого избежать?

1 Ответ

8 голосов
/ 15 июля 2011

Кодировка символов 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 не убьет тебя? Вы давно просуществовали. Вы все разрушаете.

...