最近也不知道装了什么软件,IE 7.0突然就不能显示任何的PNG图片了,全都是个红叉,连IE自己的错误页面也全是叉,实在是惨不忍睹。在网上找了半天,找到几个类似的情况,有人说是QuickTime改写了注册表,有人说什么png的一个pngfilt.dll被破坏了(谁吃饱了破坏这个dll?),解决方法是重新导入注册表并且重新注册那个dll。结果我一看注册表,果然QuickTime似乎破坏了它,因为和png相关的默认的地方都有了QuickTime的影子。但是导入正确的注册表也不行,重新注册那个dll也不行。又反复比较和导入了别人好的IE 7.0的机器上的注册表,也不行。网上下载的那个png相关的dll文件其实是IE 6.0用的,所以也不能用。甚至重装了IE都不行。
今天誓要搞定这个问题,于是用regmon一条一条看,看看IE在访问一个png图片的时候到底干了什么。微软确实是充分利用了注册表,为了访问一个png图片,IE居然就对注册表操作了两千六百多次。果然,这些记录里面既没有找到 pngfilt.dll,也没有找到它的CID,但还是没啥头绪。突然发现,IE似乎枚举了一堆MIME的类型,其中居然有个类似“ ????µ/x-m4v ”的奇怪类型。去注册表一看,果然有三个x-m4v,第一个就是那个乱码,第二个是“video/x-m4v”,第三个是“视频/x-m4v”,看来第一个应该是“视频”没搞好弄出来的(因为“视频”这两个字的GB2312码到ASCII中会变成 ÊÓƵ)。这个乱码的破玩意儿看着就不顺眼,删之。没想到,IE居然从此就可以显示PNG了!!
从来没想过MIME类型居然可以注册成中文的,因为其中有编码的问题,估计那个“视频/x-m4v”和乱码可能是什么国产播放器的杰作。而IE也是莫名其妙,怎么会多出个乱码类型PNG就挂了呢?为啥其他的MIME类型可以显示?
今天誓要搞定这个问题,于是用regmon一条一条看,看看IE在访问一个png图片的时候到底干了什么。微软确实是充分利用了注册表,为了访问一个png图片,IE居然就对注册表操作了两千六百多次。果然,这些记录里面既没有找到 pngfilt.dll,也没有找到它的CID,但还是没啥头绪。突然发现,IE似乎枚举了一堆MIME的类型,其中居然有个类似“ ????µ/x-m4v ”的奇怪类型。去注册表一看,果然有三个x-m4v,第一个就是那个乱码,第二个是“video/x-m4v”,第三个是“视频/x-m4v”,看来第一个应该是“视频”没搞好弄出来的(因为“视频”这两个字的GB2312码到ASCII中会变成 ÊÓƵ)。这个乱码的破玩意儿看着就不顺眼,删之。没想到,IE居然从此就可以显示PNG了!!
从来没想过MIME类型居然可以注册成中文的,因为其中有编码的问题,估计那个“视频/x-m4v”和乱码可能是什么国产播放器的杰作。而IE也是莫名其妙,怎么会多出个乱码类型PNG就挂了呢?为啥其他的MIME类型可以显示?