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

标签 html unicode internet-explorer-7

我有一个显示两个图像的测试页。一个叫你好.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/

相关文章:

php - 如何在 Wordpress 上调整标题和管理栏

javascript - 动态移动 DOM 元素位置

ios - 如何使用 UIWebview 删除 iOS 应用程序的 html5 本地存储

visual-studio - 在Visual Studio C#中输入Unicode数据

python - Tkinter、asksaveasfile 和 unicode

java - 方法 getBytes() 返回未知字节

css - 替代位置 : relative; for overflow: auto; bug in IE7

javascript - 为什么绝对定位的父项中的百分比宽度子项在 IE 中不起作用?

jquery - 使用jquery从iframe刷新父页面上的div

javascript - IE7 中的 Window.Print() 功能因分页屏幕而中断