`
Julysea
  • 浏览: 128654 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Jsp、Servlet、Html编码问题动手记

阅读更多

<%@ page language="java" contentType="text/html; charset=UTF-8"%> -----(1)
JSP中这句话有两层意思
1、指示当前页面内容是要按UTF-8读入处理的
2、指示这个JSP经过处理后,向浏览器传递送据时,是按UTF-8传送的。也就是浏览器(客户端)生成的文件存储格式。这时指示被转换成了语句response.setContentType("text/html; charset=UTF-8")

<meta http-equiv="Content-type" content="text/html; charset=GBK" />------(2)
这只是html文件中,指示浏览器最好以此格式显示;至于浏览器如何处理,要分情况的。
1、当页面是原生的连接服务端的页面,浏览器往往会按传送格式(例如(1))显示,忽略掉这个指示(例如(2))
2、当页面被另存后,又会按meta的指示(即(2))显示页面


(1)和(2)还是有比较明显区别的。
(1)是服务器端服务语言处理、传送模式,注意有些情况下处理和传送模式也是不同的。
(2)只是html语言中指示显示的一个标识而已,而且作用有限。并且对实际的处理过程没有影响。

JSP中有一点需要特别注意:
一个页面可能被分割成多个部分。由主JSP文件包含各个分枝JSP文件。每个文件头经常会有独立的(1)指示。而最终似乎只会是主JSP文件的指示(1)起作用。这个起作用,是指数据传送给浏览器时起作用。就是说指示容器传送数据用什么编码,浏览器接受数据时如何正确解码。而不是说解析主JSP文件和分枝JSP时只有主JSP的指示起作用。每个分枝文件的存储格式可以是各不相同的(比如说GBK、UTF-8、BIG5等等),容器解析文件肯定要用正确的解码器才行,这就是每个分枝的(1)指示起作用的时候。可以得到佐证的是,带有(1)的JSP文件被正确的转换为了servlet文件,转换后的servlet文件都是UTF-8存储格式的,而且涉及编码部分的内容也被正确解析成为UTF-8格式。注意这里有一点就是转换后的Servlet都UTF-8格式存储的,“生前”的JSP文件不一定是UTF-8格式的。这就带来一个好处,就是Java内部所有内容编码都是统一的,至于下一步用什么样的编码传输、再转换都变得容易了(此时容器选择了主JSP转换后的servlet编码格式)。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics