理解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 

http://www.iteye.com/topic/311583  

http://www.iteye.com/topic/1097560

原文地址:https://www.cnblogs.com/guoyuqiangf8/p/2776281.html