日期:2014-05-19  浏览次数:20744 次

对jsp编码解码过程的疑惑
前两天搞的中文乱码问题,搞得晕头转向的。发了个帖子(http://topic.csdn.net/u/20101105/10/69f0a103-0a9b-492a-a345-fe62f5386cc0.html?seed=70058667&r=69678814#r_69678814),还是先谢谢回帖的各位,大家提供了不少建议,像写过滤器、设置request.setCharacterEncoding、response.setCharacterEncoding等等。

不过我想先不用这些,想搞清楚jsp的编码到底是什么过程,可能是本人比较愚钝,搜了各种帖子,各种看,结果确实越看越晕。也没发现讲jsp的书哪块讲到了jsp的编码问题。

以下是我对jsp执行过程的理解和疑惑:

1、一个jsp页面在编辑完后,会以一种编码方式保存在硬盘上,比如我用的MyEclipse,其默认的编码方法 为GBK,可以在Windows->Preferences->General->Workspace中进行修改;

2、然后当运行jsp时,一个jsp文件要进行一系列的转换, .jsp -> .java -> .class,这其中又进行了一系列的编码解码。

  (1) 要读取第一步存储的硬盘上的文件,读取就应该是解码,那么用谁来解码呢,<疑惑一> 是由pageEncoding来指定的吗?</疑惑一>

  (2) 对解码后的文件转换成servlet,之后在进行编码,<疑惑二>这一步是由tomcat配置文件server.xml中的URIEncoding来编码的吗?还是必须用UTF-8编码?</疑惑二>我比较偏向于后者,因为Java文件就是Unicode编码方式的,如果是前者,那么可以随便设置,就有可能出来的.java文件不是UTF-8的。但如果真是后者,<疑惑三>那么server.xml中的URIEncoding是干嘛的?为了保证get数据采用某种编码方式吗?(网上看的)</疑惑三>

  (3) 将编码后的servlet转换成字节码文件,即class文件。这一步应该简单,用UTF-8的形式解码(Java就是Unicode编码方式,而UTF-8正是Unicode中的一种),然后转换成字节码。这一步应该是由jvm自动完成的,我们是干预不了。

  (4) 接下来tomcat会载入和执行(3)得来的二进制代码,输出一个页面,这个页面由contentType的charset来负责编码。

  (5) 浏览器接收到tomcat传过来的页面,用contentType的charset来解码,然后根据语法规则把它解释出来,这就是我们最终所见到的结果了。

还有一点疑问,<疑惑四>如果一个jsp页面中含有表单,那么jsp中本来的内容和表单中的内容是同时进行编码解码的吗?<疑惑四>

最后哪位朋友能提供些相关的资料,最好是官方的关于编码解码过程的说明,api里貌似没有这个。

------解决方案--------------------
正在寻找 答案哈
------解决方案--------------------
我来友情帮顶~~话说乱码真的很烦