eclipse下对中文乱码问题的一些思考

一、浏览器问题

当你的html页面或jsp页面没有显式声明页面编码的时候,也就是没有下面其中之一的代码

<meta http-equiv="content-type" content="text/html; charset=utf-8">          

<%@ page language="java" import="java.util.*" contentType="text/html;charset=utf-8"%>    

的时候,浏览器解析页面使用的是自身的默认编码。本人对四款浏览器做了测试,得到以下结果:


IE9                                          GB2312 (对于http协议而言,本地file协议则为utf-8)

Chrome(版本 42.0.2311.152 m)       GBK

FireFox(版本 38.0.1)         GBK

360浏览器7       UTF-8(对于http协议而言,本地file协议则为GBK)

 
而当你有显式声明页面编码类型的时候(也就是页面里有上述代码的其中一句,其中 只能在jsp页面里使用),则浏览器会根据你声明的编码类型进行解析。

二、声明语句的优先级


 的优先级非常高,表现在两个方面:1、当此语句存在时,页面按 声明的编码进行解析,这时候失效(所以我觉得可以省略不写)2、当eclipse的编辑器设置为其它编码时,的优先级仅次于other设置(据本人分析,在eclipse编码设置里面,优先级依次为other > > default(这个在preferences→General→ContentTypes→Text→JSP里面设置,没有的话则跟随workspace的编码)> workspace(这个在preferences→WorkSpace里面设置)。这里面有些效果要重启eclipse才看得出来,可能是机制的问题,有些设置后并没有立即生效。(其实第1点表明在浏览器优先级很高,第2点表明在eclipse中优先级很高)

至于,优先级很低,至少在default之下,所以并没有什么卵用,我觉得它唯一比较明显的价值就是给浏览器指定页面编码。也就是eclipse跟并没有契合度。。如果把eclipse也比喻为一种浏览器,同样对eclipse起作用,但是对eclipse就无能为力。

三、eclipse的编码与显示

其实都只是给浏览器声明了解析要用哪种编码,但是你内容都是eclipse里面编辑的,所以归根到底,乱码也跟eclipse的编码设置有关。。。只有当eclipse的编码跟你声明的编码一样的时候,浏览器才不会出乱码。(这个道理适用于一切IDE)

正如前面所说,的优先级很高,所以它取代了eclipse的默认编码,这也就是为什么通过设置,我们就不需要设置eclipse编码的原因。(真的是一举两得啊,把浏览器跟eclipse都搞定了)

当把从页面里删掉的时候,eclipse的编码会自动设置为default里面的编码,不过要保存之后才能体现。如果再把加回去,eclipse的编码又设置成中指定的。(不信的话你可以在的charset那里写成abcd,你会看到eclipse的default的编码变成了abcd,当然abcd是无效的编码)

在eclipse切换编码的时候,页面随即进行了重新编码,并且自动保存。而当切换编码后出现了乱码,其实也是可以挽救的,因为只是表面现象,只要你把浏览器的编码设置成跟eclipse一样,就能正常显示。。其实这里面是三个环节:eclipse编码页面声明编码浏览器编码(参考)。。。其中浏览器编码默认跟页面声明编码一样,你当然可以手动把浏览器切换成其它编码啦。(说了这么多,其实才是通用法则,当然实现的关键是在页面写上

这次就差不多总结这些吧。基本上都是本人实验所得,还不够权威,仅供参考。有更好想法欢迎交流。



posted on 2015-05-23 23:25  啤酒酥  阅读(1429)  评论(0编辑  收藏  举报