再说JSP中pageEncoding& charset

在《Java Web项目中的国际化》一文中,笔者在第二点中提到了在JSP的charset和pageEncoding。同时在进行Java web国际化开发时,务必指明pageEncoding和charset属性。

<%@ pagelanguage="java"contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 


然而,这二者的区别又是什么呢?指明其中的一个属性难道还不够么?呃……不得不说的是——真不够!这是因为JSP需要进行两次编码,三个阶段。


第一阶段会使用pageEncoding的设定值将 JSP编译成Servlet。JSP在服务器上是要先被编译成Servlet的,pageEncoding="?"的作用就是告诉JSP编译器,在将JSP文件编译成Servlet时使用什么编码方式。一般情况下,JSP内部定义的字符串出现乱码,通常都是由于该参数设置错误引起的。

 

第二阶段是javac对Java源码编译至Java byte code的过程,不论JSP编写时候用的是什么编码方案,JAVAC都使用UTF-8的encoding读取java源码,编译成UTF-8encoding的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内的表达规范。

 

第三阶段是Tomcat(或其他ApplicationContainer)载入和执行之前产生的Java二进制码,在client端进行展示。这时charset就开始发挥作用。在未使用response.setCharacterEncoding方法时,用该参数指定对服务器响应进行重新编码的编码。

charset属性指定了MIME类型和JSP页面回应时的字符编码方式。MIME类型的默认值是“text/html”; 字符编码方式的默认值是“ISO-8859-1”。

 

再次回到之前假设的问题,我们只设置charset。<%@page contentType="text/html;charset=utf-8" %>

这时用GBK在JSP页面上写入<% out.print(“国际化”); %>,问:服务器是否正确显示“国际化”呢?我只能说结果不得而知……但如果修改为

<%@ pagecontentType="text/html;charset=utf-8"pageEncoding="GBK"%> 我立刻就可以拍胸脯说go live啦!

 

至此,我们应该可以用如下两句话作为本文结案陈词了。

1. pageEncoding用来指定JSP编译成Servlet时使用的编码

2. charset用来指定请求服务器后返回内容的字符编码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值