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

MM.*_*MM. 2 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" />
Run Code Online (Sandbox Code Playgroud)

在Internet Explorer 7中,编码的文件路径不显示(红色x).所有其他浏览器都显示它.

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

bob*_*nce 8

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代码页.

总而言之,您无法在file:/// URL中可靠地使用非ASCII字符.

这与HTTP形成对比.例如,IIS Web服务器具有与Chrome和Firefox相同的UTF-8-with-fallback-to-ANSI行为.通过IRI和适当配置的服务器的非ASCII字符很好,但不是本地文件系统.

(在非Windows平台上,文件名是本机字节,通常表示UTF-8编码的字符,但仍然是字节.在文件系统名称和基于字节的URL%序列之间没有歧义.)

死法ANSI代码页死.为什么微软不会杀了你?你早就满开了你的欢迎.你毁了一切.