我有一个显示两个图像的测试页。一个叫你好.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 中,编码后的文件路径不显示(红色 x)。所有其他浏览器都会显示它。
有谁知道是什么原因造成的?可以避免吗?
最佳答案
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 中不存在的字符——那肯定会如果您在西方 Windows 安装中的文件名为 吘吐驴欢见.bmp
,就会出现这种情况——您根本无法访问该文件。
那么浏览器使用哪些呢?
- IE:ANSI 代码页
- Safari/Opera:UTF-8
- Chrome/Firefox:UTF-8,除非字节不是有效的 UTF-8 序列,在这种情况下,将使用 ANSI 代码页。
总而言之,您根本无法在 file:///URL 中可靠地使用非 ASCII 字符。
这与 HTTP 形成对比。例如,IIS Web 服务器与 Chrome 和 Firefox 具有相同的 UTF-8-with-fallback-to-ANSI 行为。通过 IRI 和适当配置的服务器的非 ASCII 字符没问题,但本地文件系统不行。
(在非 Windows 平台上,文件名本身是字节,通常表示 UTF-8 编码的字符,但仍然是字节。文件系统名称和基于字节的 URL % 序列之间没有歧义。)
死 ANSI 代码页死。微软为什么不杀了你?你早就不受欢迎了。你毁了一切。
关于html - IE7 不会显示带有编码文件名的 bmp 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6691542/