关于JSP中文的有关问题

关于JSP中文的问题

看了不少java中文问题的文章,觉得自己有些关键的地方没有搞清楚,而且也少有人解释清楚,在这里将我的问题列举如下,大家讨论讨论。 


1. 

  第一步,程序员用编辑工具编写jsp文件,然后保存。此时如果不特别指定,一般都是以平台的默认编码保存的。比如在中文win2k上,这个jsp文件是以GBK编码的。 

2 . 

  web容器将jsp文件编译为servlet class文件。编译器需要读取硬盘上的jsp文件,那么它以什么字符集来解码呢?这个过程就像我们编辑一个文本文件,然后保存(是GBK编码),你再用编辑器打开时,编辑器会以GBK来解码一样。 
  不过这里还是复杂一点,jsp编译器根据什么来确定解码字符集?是<%@page pageEncoding="GB2312"%>么?那么当2个页面指定的 
  pageEncoding不同并且用include将其合在一起时,jsp编译器的策略是什么? 

3. 

  浏览器以get或post方法传递参数时,是以什么编码的?是否UTF-8?以get传递时还要经过urlencoding,除此之外和post方法还有何不同?看车东的文章http://www.chedong.com/tech/hello_unicode.html,get传递时,是先按GBK编码再urlencoding,我自己试验的结果也是如此。那么设定浏览器以UTF-8发送还有什么作用?另外,如果是这样,那么web容器怎么知道按什么来解码?因为客户端可是多种多样阿,传过来的参数什么编码的都有,web容器怎么处理? 

4. 

  web容器得到浏览器传递的参数,以什么字符集解码?若浏览器以UTF-8编码,这里只能是UTF-8,如果浏览器以平台字符集编码,那么这里web容器是怎样成功解码的呢?成功解码后,将参数写进request对象里时又是什么编码?默认ISO-8859-1?从request里取得的参数是以什么来解码?通过request.setCharacterEncoding("GB2312")指定? 

5. 

  servlet从request里取得信息,并进行一些操作后,往response的输出流里写入信息时又是什么编码?web容器从response输出流里读取时怎样解码?然后以什么字符集编码发送到客户端浏览器?默认ISO-8859-1?通过response.setContentType("text/html;charset=GB2312")指定?当2个页面通过include合在一起怎么办? 


我尤其疑惑的是第3个问题。浏览器以get或post方法传递参数时,是以什么编码的?我想,如果这5个问题都搞清楚了,要是碰到jsp的中文问题应该都能自行解决了。