2011-07-14 6 views
2

2つの画像を表示するテストページがあります。 1つはhello.bmpと呼ばれ、もう1つは吐吐驴欸觰.bmpと呼ばれます(これは漢字のランダムなコレクションです。後者のイメージでは、ページのHTMLにエンコード形式を使用します。IE7はエンコードされたファイル名のbmpファイルを表示しません

HTMLは非常に単純である:インターネットで

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

は(赤X)7は、符号化されたファイルパスが表示されない探ります。それ以外のブラウザはすべて表示します。

これを引き起こす原因は誰にも分かりますか?避けられますか?

+0

IEとnot-IEがヒットしたときのサーバーのアクセスログを比較します。 IE 404ingですか?パスは違いますか? – Quentin

+0

@MM:あなたのサイトに実際に.bmpを使用していますか? – PeeHaa

+0

@Quentin - 404はありません。これは画像と同様にローカルファイルです。 hello.bmpは正しくロードされますが、隣のエンコードされたパスは失敗します。 –

答えて

8

file:///の文字エンコードは、Windowsの各ブラウザで異なる動作をします。

、Windowsのファイル名はネイティブにUnicodeベースなので、あなたはバイトベースでURLを使用する場合、それは、エンコーディングを使用してUnicode文字をバイトのシーケンスを変換する必要があります。どのようなエンコーディングですか?言っても標準ではありませんが、二つの明白な可能性があります

  • UTF-8、それはすべてをカバーし、また、URIの中でUnicodeを置くためのIRI標準で使用される人気のデフォルトのエンコーディングであるため、

  • システムによって異なり、任意のデフォルトである(誤解を招く名前の)「ANSI」コードページ、。西欧のWindowsインストールでは、コードページ1252(ISO-8859-1に似ています)となります。中国語版Windowsインストールでは、コードページ936(GB2312と同様)になります。あなたはために何が起こっているのか分からないので、

ANSIコードページが苦痛である、それは決して UTF-8だし、あなたのファイル名は、ANSI-確かになるには存在しない文字が含まれている場合Western Windowsのインストール時にファイル名徘吐驴欸觰.bmpがある場合は、ファイルにアクセスできません。

ブラウザはどちらを使用していますか?

  • IE:ANSIコードページ
  • サファリ/オペラ:UTF-8
  • クローム/ Firefoxの:UTF-8、バイトが有効なUTF-8シーケンス、ケース内ANSIコードではありませんしない限り、代わりにページが使用されます。

結論として、確実にfile:/// URLに非ASCII文字を使用することはできません。

これはHTTPとは対照的です。たとえば、IIS Webサーバーには、ChromeやFirefoxと同じUTF-8 with fallback-ANSI動作があります。 IRIと適切に構成されたサーバーを介した非ASCII文字は問題ありませんが、ローカルファイルシステムではありません。

は(Windows以外のプラットフォームではファイル名はネイティブであり、通常はUTF-8でエンコードされた文字を表す、バイト、それでもバイト。あぁ、ファイルシステムの名前とバイトベースのURL%の-sequencesの間には曖昧さがありません。)

die ANSIコードページdie。なぜマイクロソフトはあなたを殺しませんか?あなたは長い間、あなたの歓迎には屈しませんでした。あなたはすべてを台無しにする。

+0

+1ですが、あなたの細かい点に関しては、恐らくWindows-1252を殺すと恐ろしい90年代(そしてそれ以前)から静かに(そして*正常に*)実行されている多くのプログラムが壊れてしまいます。なぜマイクロソフトはそのような集団の足で自分自身を撃つだろうか? .NETプラットフォームは、適切な中期的な応答IMHOですが、レガシーコードはまだレガシーコードです...それは実行し続ける必要があります:) –

関連する問題