解决中文乱码的一些心得

  • 一、产生乱码的原因
  • 我们先来看看WEB应用数据传输过程中的那些需要翻译的地方
  • 提交请求的两种方式,Get 和 Post 区别:
  • 二、jQuery的提交方式


一、产生乱码的原因

我们都知道在计算机的世界里只有0(关)和1(开),我们和计算机交流其实是由语言上的障碍的,所以我们之间需要一个“翻译”,这个翻译其实就是一段程序,它有很多本字典,每本字典对应了一种语言,比如我们常用的中文字符集“UTF-8”,标准字符集“ASCII”。
所以之所以会产生乱码,其实原因很简单,就是“翻译”拿错了字典,我们现在就要知道在这个过程中怎么拿错了,找到这个原因就好解决了。

我们先来看看WEB应用数据传输过程中的那些需要翻译的地方

(1)首先是项目文件存储的时候,需要指定一个编码方式。
(2)其次是在发送数据时,需要指定一个编码方式。
(3)然后是接收数据时,需要指定一个编码方式。
(4)最后是保存数据在本地时,需要指定一个编码方式。

一般来说第一点和最后一点我们都不用太操心,因为有个操作系统在干这件事情,我们无需关心。
我们主要关心中间两个点。

提交请求的两种方式,Get 和 Post 区别:

Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求。

  1. Get是获取信息,而不是修改信息,类似数据库查询功能一样,数据不会被修改。
  2. Get传输的数据有大小限制,因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了,不同的浏览器对URL的长度的限制是不同的。
  3. GET请求的数据会被浏览器缓存起来,用户名和密码将明文出现在URL上,其他人可以查到历史浏览记录,数据不太安全。Request.QueryString来获取Get方式提交来的数据。
  4. Post请求则作为http消息的实际内容发送给web服务器,数据放置在HTML Header内提交,Post没有限制提交的数据。
  5. Post比Get安全,当数据是中文或者不敏感的数据,则用get,因为使用get,参数会显示在地址,对于敏感数据和不是中文字符的数据,则用post。
  6. POST表示可能修改变服务器上的资源的请求,在服务器端,用Post方式提交的数据Request.Form来获取。

二、jQuery的提交方式

使用jQuery以GET方式提交

$.ajax({
            	async: false,//false为同步,true为异步
            	type:'GET',//默认使用get方式 如果有中文会乱码
            	url:config.url+"add?name=小红&age=23",
            	success: function(res){
					//此处省略
            	}
            });

使用jQuery以GET方式提交出现乱码的解决方法

//前端 

//前端进行两次编码,后端解码一次(服务器会自动解码一次,总共两次)。
//这里为什么呢?首先前端编码两次是和后端解码两次相对应,由于服务器会自动解
//码一次,所以在后端看起来就少做了一次解码。
//既然这样为什么不前端编码一次,服务器不解码不就对应上了就好了,因为编码两
//次这才是解决乱码的关键,为什么呢?首先你得知道所有的字符集都是ASCII码的
//扩展,所以对于英文和英文状态下的字符的编码都是一样的(都是在ASCII标准中
//出现的字符),所以英文字符是不会出现乱码的情况,所以我们先使用
//encodeURI()编码成一堆乱七八糟的标准字符(这次指定的字符集一定要和服务器
//解码时的字符集一致),能够被任意字符集包容,再对这个编码好的内容再编码一
//次(这次编码可以指定任意字符集),最后将两次编码后的数据发送到服务器,服
//务器自动解码一次(由于都是一些ASCII码里的字符,所以不管服务器使用什么字
//符集解码都不会出错),这个时候在手动使用前端第一次编码时的字符集解码就可
//以得到正确的中文了。
			$.ajax({
            	async: false,//false为同步,true为异步
            	type:'GET',//默认使用get方式 如果有中文会乱码
            	url:config.url+"add?name="+encodeURI(encodeURI("小红"))+"&age=23",
            	success: function(res){
					//此处省略
            	}
            });
   
 //后端
 java.net.URLDecoder.decode(req.getParameter("name"),"utf-8"); //java中url解码
 
 //也可以在tomcat中 找到server.xml  Connector元素下设置
 URLEncoding="UTF-8"

使用jQuery以POST方式提交

//这里为什么不会出现乱码呢?是因为post方式提交的数据是以ISO010646字符集编码的,这是一个通用字符集,是所有其他字符集标准的一个超集,它保证与其他字符集是双向兼容的。
		$.ajax({
            	async: false,//false为同步,true为异步
            	type:'POST',//使用post传递数据 不会乱码
            	url:config.url+"add?",
            	data: { 
            		name:"小红",
            		age:23
            	},
            	success: function(res){
 					//此处省略
            	}
            });