我有一个显示两个图像的测试页面。一个叫做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)。所有其他浏览器都会显示它。
有谁知道会导致什么?可以避免吗?
答案 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
,则无法访问该文件。
浏览器使用哪个?
总而言之,您无法在file:/// URL中可靠地使用非ASCII字符。
这与HTTP形成对比。例如,IIS Web服务器具有与Chrome和Firefox相同的UTF-8-with-fallback-to-ANSI行为。通过IRI和适当配置的服务器的非ASCII字符很好,但不是本地文件系统。
(在非Windows平台上,文件名是本机字节,通常表示UTF-8编码的字符,但仍然是字节。在文件系统名称和基于字节的URL%序列之间没有歧义。)
死掉ANSI代码页死。为什么微软不会杀了你?你早就满开了你的欢迎。你毁了一切。