IE7不会显示带有编码文件名的bmp文件

时间:2011-07-14 10:09:41

标签: html unicode internet-explorer-7

我有一个显示两个图像的测试页面。一个叫做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 Explorer 7中,编码的文件路径不显示(红色x)。所有其他浏览器都会显示它。

有谁知道会导致什么?可以避免吗?

1 个答案:

答案 0 :(得分:8)

file:///网址的字符编码在Windows上的浏览器中的工作方式不同。

Windows文件名本身是基于Unicode的,因此当您使用基于字节的URL时,必须使用编码将该字节序列转换为Unicode字符。什么编码?没有标准可说,但有两个明显的可能性:

  • UTF-8,因为它涵盖了所有内容并且是一种流行的默认编码,IRI标准也将其用于将URI放入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代码页死。为什么微软不会杀了你?你早就满开了你的欢迎。你毁了一切。