关闭

JSP网页字符集编码

510人阅读 评论(0) 收藏 举报

1.     JSP网页编码的指定
 JSP网页编码用<%@ page contentType="text/html; charset=UTF-8"%>语句来指定,其中的UTF-8就是JSP文件编码的格式。
 JSP文件编码有两个作用:
 •     表明JSP文件本身的字符编码格式,是ASCII,还是UTF-8等等。这种格式在jsp翻译成java文件时会有影响,大家都知道,jsp文件在被访问时会先被编译成servlet,程序实际访问的是jsp对应的servlet,而不是jsp本身。jsp翻译成的java文件是UTF-8格式的,在jsp文件本身的格式之间和UTF-8格式之间需要做一个转换,这种格式转换就必须首先明确JSP文件本身的字符编码格式。
 •     WEB服务器用这个编码格式来表明响应报文体的编码格式,即response内容的编码格式,也就是告诉浏览器服务器返回的内容是什么格式的,如果不告诉浏览器响应内容是什么格式,那么浏览器就不知道该如何解析响应内容,到底是用GBK来解析,还是UTF-8来解析。在查看JSP翻译成的java文件时,会看到这样一个语句:response.setContentType("text/html; charset=UTF-8")。其中的"text/html; charset=UTF-8"就是来自于JSP文件的编码声明语句。如果JSP的编码声明语句为:<%@ page contentType="text/html; charset=GBK"%>,那么JSP翻译成的java文件中对应的语句就会变成response.setContentType("text/html; charset=GBK"),这时浏览器中展示内容的编码格式也就变成了GBK。
 2.     GET/POST参数编码格式
 GET和POST的参数处理逻辑不一致,众所周知,GET的参数是放在URL里的,需要通过解析URL来获得,而POST的参数则是放在请求正文里的。在服务器端,可以通过response.setCharacterEncoding方法来明确用哪种编码来解析POST参数,但这种方法对GET参数不起作用,因为GET参数是放在URL里的,所以涉及到URL编码的解析。对于Tomcat,可以在server.xml里配置URL的编码格式,方法是在<Connector>元素中通过URIEncoding="UTF-8"来指明,意思就是URL的编码格式是UTF-8,当然也可以设置为URIEncoding="GBK"。如果不指定,Tomcat默认用ISO-8859-1字符编码来解析URL。服务器端采用何种编码格式来设置,需要看浏览器是用何种编码来生成URL,具体后面会有详细说明。
 3.     浏览器生成GET/POST参数所用的编码格式
 现代浏览器一般采用网页内容的编码格式来生成GET和POST参数。即如果网页内容是GBK格式的,则生成的GET和POST参数用GBK格式进行编码,如果网页内容是UTF-8格式的,则生成的GET和POST参数用UTF-8格式进行编码。例如对于参数“我”,用GBK生成的编码是%CE%D2,而用UTF-8生成的编码格式是%E6%88%91。可见,对于相同的参数内容,用不同的编码格式生成的编码内容是不一样的,这也是为什么服务器端为了正确解析参数,要明确参数编码格式的原因。对于JSP程序,浏览器展示的网页内容是JSP文件生成的,因此JSP文件的编码格式也就决定了浏览器网页内容的编码格式,同时也就决定了GET和POST参数的编码格式,最终来说,JSP文件中的<%@ page contentType="text/html; charset=UTF-8"%>编码声明会确定GET和POST参数的编码格式,同时也确定URL的编码格式。
 4.     统一采用UTF-8编码格式
 统一采用UTF-8编码格式是解决乱码问题的最佳解决办法。以Tomcat为例,可以通过以下几方面来将编码统一设置为UTF-8:

  • 对于GET参数,在server.xml的<Connector>元素中设置URIEncoding="UTF-8";
  • 对于POST参数,用一个character encoding filter将编码格式设置为UTF-8,在web.xml中增加以下内容:

    <filter>
         <filter-name>Set Character Encoding</filter-name>
         <filter-class>filters.SetCharacterEncodingFilter</filter-class>
         <init-param>
             <param-name>encoding</param-name>
             <param-value>UTF-8</param-value>
         </init-param>
     </filter>
     <filter-mapping>
         <filter-name>Set Character Encoding</filter-name>
         <url-pattern>/*</url-pattern>
      </filter-mapping>
      其中filters.SetCharacterEncodingFilter类在Tomcat中有,
      5.x版本在webapps/jsp-examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.java
      6.x版本在webapps/examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.java
      可以把这个文件直接加到项目中。

  • 所有的JSP文件都声明为<%@page contentType="text/html; charset=UTF-8" %>


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:35621次
    • 积分:456
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:0篇
    • 译文:2篇
    • 评论:1条
    最新评论