理解web编码原理,解决乱码
jsp 编码及乱码解决方案
1. 在web中request 的生存周期是从一次request开始到本次response结束,在这个过程中对象是如何编码的,只有理解浏览器、web应用的编码解码,我们在开发过程中才可以避免乱码的困扰。
在jsp 页面中,有3中编码信息
<% @ page pageEncoding="utf-8" %>
另外,该参数还有一个功能,就是在JSP中不指定contentType参数,也不使用response.setCharacterEncoding方法时,指定对服务器响应进行重新编码的编码
<%@page contentType="text/html,charset=utf-8" %>
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> </body> </html>
1 处的编码表示jsp 将按此编码被翻译为servlet。同时也指定了jsp页面本身的编码方式为UTF-8
2 处的编码表示当web响应浏览器的请求时,response页面在浏览器端用哪种编码解析。与在servlet中使用response.setCharaterEncoding("utf-8")等同;
3 处的编码表示当前页面用post提交数据时,浏览器对数据的编码方式。
乱码问题发生在浏览器、web服务端 发送和接收时的编码解码方式不同造成的。
浏览器发送数据时对URL及参数的编码依据是2 对 页面中post数据的编码使用3
服务端在接收数据时,对于post数据通过request.setCharacterEncoding("utf-8");
对于get方式提交的数据通过在tomcat server.xml配置URIEncoding="utf-8"解决,这个主意是针对get方式提交数据,useBodyEncodingForURI为true,表示针对不同应用使用自身的编码。服务端在发送数据时编码依赖顺序是response.setCharacterEncoding—contentType—pageEncoding(后两者是在被发送页面中)
spring中过滤器解决乱码问题。
我们知道java是unicode编码,unicode是可变长编码,只规定了2进制的表示,没有规定它的实现,而utf-8,utf-16就是unicode的实现。jvm 采用unicode编码,
对于本人遇到的编码问题及查阅网络资料的总结,收笔时间:2012年11月18日20:19:25,另推荐一篇,该篇总结的很全,希望对于新手有所帮助。
http://blog.sina.com.cn/s/blog_600046120100thst.html