post和get提交服务器编码过程
参考资料:http://blog.csdn.net/z55887/article/details/46975679
先说出一个知识点:
如果浏览器端编码是UTF-8,那在服务器端解决乱码问题的方法有两种:
浏览器提交数据到web服务器的方式:
Post方式
request.setCharacterEncoding(“UTF-8");
Get方式
String param =request.getParameter(“param”);
Stringnewparam = new String( param.getBytes("iso-8859-1"),“utf-8”);
为什么POST和GET有差别?还有UTF-8和ISO-8859-1的区别到底是什么?字符从浏览器到服务器端的编码过程又是怎样的?
带这这些疑问,我查了好几天资料,总算得到一个自己还算满意的答案,先总结分享下自己的理解,水平有限,有错误的话以后再慢慢改正。
1.首先说下字符编码的基础知识:
开始时先出现的编码是ASCII码,美国制定的字符编码,可以把许多符号英文等表示成数字,例如空格是32。这个编码一共规定了128个字符,即7位,用一个字节就可以表示全部的英语了。
但是世界上语言是很多的,像中国这样图案性的文字只能一个一个的表示,汉字有10万以上,显然用ASCII码表示是不够的,这时就出现了一种表示简体中文的字符编码GB2323,由两个字节表示一个汉字,可以表示常用的256*256=65536个常用汉字。
语言有那么多种,可不可以有一种表示全部语言的字符编码呢?所以出现了Unicode,即用一个很大的文字集合编码表示所有国家的文字,如 0100-017F:拉丁文扩展-A (Latin Extended-A),0600-06FF:阿拉伯文 (Arabic)
但问题又出现了,如果都采用Unicode字符编码的话会给字符存储带来极大的浪费,例如统一使用4个字节表示所有字符,那对于只需要用1个字节就可以全部表示的英语,真是浪费了太多空间啊,所以这时候出现了折中的方案,即UTF-8,一种Unicode的实现方案,使用可变的编码方式表示所有文字,根据字符的不同改变字节长度。其余的Unicode的实现方案也提下:UTF-16(字符用两个字节或四个字节表示)和UTF-32(字符用四个字节表示)
最后说下ISO-8859-1,它是一种单字节的编码方式,向下兼容ASCII,部分支持欧洲使用的语言,servlet端默认是使用这个编码方式的
2.再说下POST和GET两种方式传递数据的区别,以及为什么用上面的代码解决乱码问题
POST是将数据放在HTTP请求体中,GET是将数据放在HTTP请求行中URL里。
request.setCharacterEncoding(“UTF-8");是设置服务器端接收请求体的编码格式,对服务器端接受URL的编码格式无影响,所有不能采用此办法来解决GET乱码问题。如果想解决两种传递数据的乱码问题,可以在tomcat的server.xml中,设置元素的属性URIEncoding="UTF-8”,useBodyEncodingForURI="true",则post和get都是UTF-8编码了
3.最后说下字符从浏览器到服务器端的编码过程
Post方式
request.setCharacterEncoding(“UTF-8");
例如浏览器端传的数据为“你好“,浏览器默认编码格式是UTF-8,编码后变为0x4F60,0x597D,一共4个字节,然后传到服务器端,由于设置了上面的方法,浏览器接收了二进制数后采用UTF-8解码,就把0x4F60,0x597D又变成了”你好“
Get方式
String param =request.getParameter(“param”);
String newparam = new String( param.getBytes("iso-8859-1"),“utf-8”);
例如浏览器端传的数据为“你好“,编码后变为0x4F60,0x597D。传到服务器,由于服务器端对URL的默认解码是ISO-8859-1,故把0x4F60,0x597D变成了"&*",这时候如果直接输出就会发现是乱码。所以先用getBytes把param按ISO-8859-1的编码解码成为0x4F60,0x597D,再用UTF-8的编码重新编成了”你好“
好了,终于完了,最后贴几个参考博文的链接吧:
get,post的乱码处理:
http://blog.csdn.net/luyuncsd123/article/details/8453526
http://blog.sina.com.cn/s/blog_ad1c3bdf0102uz99.html
字符编码:
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
post和get提交服务器编码过程的更多相关文章
- GET&&POST请求编码过程
编码.解码 我们在开发过程中不可避免的一个话题就是编码和解码,那么什么是编码什么是解码呢?为什么要进行编码和解码呢?下面我们一一分析! 编码和解码的概念 编码是信息从一种形式或格式转换为另一种形式的过 ...
- pdb 源码索引符号服务器创建过程
pdb是调试程序必不可少的东西,它保存着一个exe或dll的调试信息,对pdb进行源码索引可以快速找到软件对应该版本的代码,本文以subversion版本控制服务器进行介绍 一.需要安装的软件 win ...
- js ajax post提交 ie和火狐、谷歌提交的编码不一致,导致中文乱码
今天遇到一个问题找了很久发现: 使用js ajax post提交 ie和火狐.谷歌提交的编码不一致,导致中文乱码 //http://www.cnblogs.com/QGC88 $.ajax({ url ...
- 使用ffmpeg视频编码过程中踩的一个坑
今天说说使用ffmpeg在写视频编码程序中踩的一个坑,这个坑让我花了好多时间,回头想想,非常多时候一旦思维定势真的挺难突破的.以下是不对的编码结果: ...
- 推荐2一个在Java编码过程中得心应手的工具
推荐2在编码过程中的减小不仅编码的量,挺easy工具上手:可适用Java反思与单探头Assert. 1 Mirror:Java反思 简单介绍 官网:http://projetos.vidageek.n ...
- mysql设置服务器编码
今天写java程序的时候出现了插入mysql数据中文乱码问题,确定数据库和表的编码都已指定utf-8.百度后得知mysql安装后需设置服务器编码,以下是解决方法(ubuntu; mysql 5.6.2 ...
- Cacti监控mysql数据库服务器实现过程
Cacti监控mysql数据库服务器实现过程 2014-05-29 0个评论 来源:Cacti监控mysql数据库服务器实现过程 收藏 我要投稿 1 先在cacti服务器端安 ...
- java中文乱码解决之道(七)-----JSP页面编码过程
我们知道JSP页面是需要转换为servlet的,在转换过程中肯定是要进行编码的.在JSP转换为servlet过程中下面一段代码起到至关重要的作用. <%@ page language=" ...
- JS之表单提交时编码类型enctype详解
简介 form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x- ...
随机推荐
- ubuntu16.04LTS安装软件
1.安装chrome 下载源加入到系统的源列表 sudo wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/ ...
- Office EXCEL 2010如何取消宏密码保护
打开宏编辑器之后,右击VBA项目,然后属性,保护中去掉密码即可
- 谈一谈关于NODE里的N管理
模块可能与当前的NODE版本不和,NODE升级问题? 一切尽在掌握 1.首先设置好PATH(你安装的目录) Debian系列: sudo gedit /etc/profile Redhat系列: su ...
- Android Activity与远程Service的通信学习总结
当一个Service在androidManifest中被声明为 process=":remote", 或者是还有一个应用程序中的Service时,即为远程Service, 远程的意 ...
- MySQL基础笔记(二) 完整性约束
我们知道,一种数据模型必须包含三个基本的部分: 构造机制(数据结构):主要描述数据的类型.内容.性质以及数据间的联系等. 运算机制(数据操作):主要描述在相应的数据结构上的操作类型和操作方式. 约束机 ...
- string 是值类型,还是引用类型(.net)[转]
转自http://hi.baidu.com/newfzks/item/b805f0f4edb0810dd89e7290 string 是值类型,还是引用类型(.net) 一. string 类型的用法 ...
- Apache Karaf配置远程调试
软件环境 apache-karaf-4.0.0 配置方法: 在 bin/karaf.bat 文件里,顶部增加 set KARAF_DEBUG=true 然后.重新启动karaf 启动之后.就可以看到例 ...
- Codeforces 757 D. Felicity's Big Secret Revealed 状压DP
D. Felicity's Big Secret Revealed The gym leaders were fascinated by the evolutions which took pla ...
- 浅谈UML的概念和模型之UML视图
相信大家都知道UML的全称,统一建模语言(UML是 Unified Modeling Language的缩写)是用来对软件系统进行可视化建模的一种语言.UML为面向对象开发系统的产品进行说明.可视化. ...
- 谈谈对redux的认识
redux是从flux演变而来,但又独立于react.简言之就是,redux是一种单纯的状态管理器.可以和react搭配,也可以和其它框架搭配. redux有三个重要的部分组成: store, act ...