`
jvtarena
  • 浏览: 17069 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

javaweb页面设置content-type最高优先级

    博客分类:
  • java
阅读更多
首先,感谢你的阅读,本人观点:学习编程是个漫长的过程并不是一时就会很厉害的,关键是坚持,快乐地学习,在这里分享我的一些笔记给你;
  置content-type的最高优先级就是在jsp页面设置<%@ page contentType=”text/html;charset=gb2312″%>了吗?还有没有地方设置,可以覆盖掉这个设置。曾今试过用过滤器设置contentType,但还是无效,好像优先级没有jsp页面设置的高 ———————-

  想过一个笨办法,就是写个java程序读取所有的jsp,让后把<%@ page contentType=”text/html;charset=gb2312″%>换掉,但这种换法改动文件多,风险也大

  contentType覆盖的,就是最后一次的设置才是最终结果。所以就没有什么优先级的问题,而是在什么地方设置是最后一次。个人认为在filter设置应该可以解决你的问题的。很多人都是用filter来解决编码的问题的。

  GBK和GB2312编码的区别:GB2312只是GBK的一个子集,就是说,GBK包括所有的汉字(简体和繁体),而GB2312只包括简体。 还有一个要说明,在编码上没有优先级的问题,只有你设置的这个编码在什么时候起作用。 contentType的charset是指服务器发送给客户端时的内容编码,浏览器接收到后也是根据这个编码进行解码的,如果你设置的是GB2312,那么如果网页中有繁体字,那就会出现乱码,因为GB2312不可能表示繁体字。

  解决办法:

  1.对于请求,可以使用过滤器或者在每个JSP/Servlet中设置request.setCharacterEncoding(”UTF-8″)。当然设置成GBK也行,但是从占用空间来说,还是设置成UTF-8比较好,再说UTF-8是国际标准,可以显示所有中文(繁体和简体)。通过这一步,可以确保你提交的数据编码正确。

  2.在所有的JSP/Servlet中设置contentType=”text/html;charset=UTF-8″或response.setCharacterEncoding(”UTF-8″),当然设置能GBK也行,但是如果那一天想显示日文,那就还需要换,所以还是建议设置成UTF-8.从而间接实现对浏览器编码的设置。经过这一步的设置可以保证浏览器显示正确。

  3.对于同一个应用,最好统一编码,推荐为UTF-8,当然GBK也可以。

  对于第二条,由于你以前设置的是GB2312,为了能正确的在浏览器页面中显示繁体字,需要更改JSP页面的contentType属性值,当然如果少的话,手动修改,如果很多,可以采用让电脑帮你完成,但是需要你自己写一个程序。

  这里我只给你提供程序的思路,你自己去实现,这个应该来说是最基本的。

  递归遍历你的JSP所在的目录以及该目录下的子目录和JSP文件,对于JSP文件,用BufferedReader封装FileReader,然后用readline()按行读取,并用正则表达式进行匹配,public String replaceFirst(”charset=gb2312″,

  “charset=GBK”);然后读取下一个JSP文件,这个就把所有JSP文件中的contentType=”text/html;charset=gb2312″中的gb2312换成了UTF-8或GBK。

  如果你的JSP文件不超过10000个,那应该几秒钟就可完成。

  再补充一下,如果单纯采用过滤器,是不行的。如果你采用过滤器,在提交请求之前,你设置的编码是GBK,这个只是对你提交的数据进行编码,然后后台处理你的请求,处理后结果返回,这个时候,你可以对返回的结果进行重编码,还是在同一个过滤器中,要放在public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)方法之后,但是这个设置只是对服务器的返回数据进行的编码,当浏览器接收到数据之后,解码的时候仍然是采用你的JSP页面中的那个GB2312设置,所以,这个时候就是把GBK编码的数据转换成了gb2312的数据,对于简体字,没有问题,但是对于繁体字,就会出项乱码。 所以必须修改JSP页面中的contentType属性值,修改的办法,可采用我上面提到的方法。在jsp页面设置<%@ page contentType=”text/html;charset=gb2312″%>

  contentType的charset是指服务器发送给客户端时的内容编码 这个算是最高优先级的 所有你还是得改jsp代码,没办法,

  就写个程序去读取文件修改嘛,可以先备份一份所有文件嘛

  页面定义的编码格式就是最后调用的了,不可能还有更慢调用的了,只能是替换掉jsp页面的编码格式了,要不全用资源文件的形式,当然工作量会更大
从基础的学习到后面应用提高都非常的系统,无论你是本专业的还是跨专业的,都能有所收获,参加4个月的达内时光转眼已逝,伴随着喜悦,达内给你一个新的平台,一个崭新的开始。
(本文由广州达内http://www.jvtarena.com/java.html为你分享;)
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics