转载

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


Chrome( 版本 42.0.2311.152 m )        GBK


FireFox ( 版本 38.0.1 )           GBK

360浏览器 7        UTF-8

而当你有显式声明页面编码类型的时候(也就是页面里有上述代码的其中一句,其中   只能在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编码页面声明编码浏览器编码 (参考 )。。。其中 浏览器编码 默认跟 页面声明编码 一样,你当然可以手动把浏览器切换成其它编码啦。(说了这么多,其实 才是通用法则,当然实现 的关键是在页面写上

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

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

正文到此结束
Loading...