WEB应用常见中文数据乱码问题总结

在实际工作中,会遇到很多中文数据的乱码的问题,之所以会产生乱码,就是因为服务器和客户端沟通的编码不一致造成的,因此解决的办法是:在客户端和服务器之间设置一个统一的编码,之后就按照此编码进行数据的传输和接收。

1、以POST方式提交表单中文参数的乱码问题

客户端是以UTF-8字符编码将表单数据传输到服务器端,因此服务器也需要设置以UTF-8字符编码进行接收,服务器可以直接使用从ServletRequest接口继承而来的"setCharacterEncoding(charset)"方法进行统一的编码设置。代码如下:

public void doPost(HttpServletRequestrequest, HttpServletResponse response)

throws ServletException,IOException {

/**

* 客户端是以UTF-8编码传输数据到服务器端的,所以需要设置服务器端以UTF-8的编码进行接收         */

request.setCharacterEncoding("UTF-8");

}

2、以GET方式提交表单中文参数的乱码问题

如果是用get的方式提交表单,通过request.setCharacterEncoding("UTF-8");这种方式是解决不了中文乱码问题

对于以get方式传输的数据,默认的还是使用ISO8859-1这个字符编码来接收数据,客户端以UTF-8的编码传输数据到服务器端,而服务器端的request对象使用的是ISO8859-1这个字符编码来接收数据,服务器和客户端的编码不一致。

解决办法:在接收到数据后,先获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题。代码如下:

public void doGet(HttpServletRequestrequest, HttpServletResponse response)

throws ServletException,IOException {

/**

* 对于以get方式传输的数据,request默认的还是使用ISO8859-1编码接收数据

*/

String name = request.getParameter("name");//接收数据

name =new String(name.getBytes("ISO8859-1"),"UTF-8") ;//将ISO8859-1字符转换为UTF-8

}

3、以超链接(URL)形式传递中文参数的乱码问题

超链接数据是以get的方式传输到服务器的,所以接收中文数据时也会产生中文乱码问题,而解决中文乱码问题的方式与上述的以get方式提交表单中文数据乱码处理问题的方式一致。

4、中文数据乱码问题总结

1、如果提交方式为post,想不乱码,只需要在服务器端设置request对象的编码即可,客户端以哪种编码提交的,服务器端的request对象就以对应的编码接收,比如客户端是以UTF-8编码提交的,那么服务器端request对象就以UTF-8编码接收(request.setCharacterEncoding("UTF-8"))

2、如果提交方式为get,设置request对象的编码是无效的,request对象还是以默认的ISO8859-1编码接收数据,需要将ISO8859-1编码数据转换为需要的编码类型,比如UTF-8:

String name =request.getParameter("name");//接收数据

name =new String(name.getBytes("ISO8859-1"),"UTF-8") ;//将ISO8859-1字符转换为UTF-8

3、如果是使用链接直接提交数据,那么参考get的提交方式;

4、中文数据乱码的终极解决之道,就是让系统在传输过程中,没有中文,那么自然就没有了乱码一说。简单的说,就是把中文在数据传输之前做转码,在数据传输之后做解码。

比如:

java.net.URLEncoder.encode("要转码的内容","UTF-8"); //
原来单参数方法已经过时。

如果仔细观察,我们在百度搜索之后,百度的中文都会变成编码符号传输,用的就是encode的方法。

用百度搜索:中文乱码

如果能看到链接的话,内容如下:http://www.baidu.com/s?ie=UTF-8&wd=%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81

时间: 2024-10-11 09:57:55

WEB应用常见中文数据乱码问题总结的相关文章

提交中文数据乱码问题总结

提交中文数据乱码问题总结 1.如果提交方式为post,想不乱码,只需要在服务器端设置request对象的编码即可,客户端以哪种编码提交的,服务器端的request对象就以对应的编码接收,比如客户端是以UTF-8编码提交的,那么服务器端request对象就以UTF-8编码接收(request.setCharacterEncoding("UTF-8")) 2.如果提交方式为get,设置request对象的编码是无效的,request对象还是以默认的ISO8859-1编码接收数据,因此要想不

笨鸟先飞之Java--MySql中文数据乱码为哪般???

从开始敲drp到现在的hibernate,中文数据乱码无时无刻不"陪伴"在我的身边: 图一:在drp的分销商模块,每次修改区域虽然返回修改成功,但是每次读取到的中文数据都是"???"的字符串,但数字和字母的数据却不受影响. 图二:不管是drp还是hibernate项目,通过执行sql或者hql语句插入中文数据的,都会呈现图中的景象,甚是无语...... 但被它困扰了这么久,我也算"久病成医",今天就一起来给Java项目医治一下中文数据乱码的这个大

关于hibernate插入mysql数据库中文数据乱码处理

这几天在学习hibernate,在程序中将利用hibernate将数据插入的mysql数据库的时候,发现出现了中文乱码,在网上搜索了好长时间,大概的解决方法都是修改my.ini的配置文件,修改为gbk,但是插入数据还是出现乱码的情况.不过最后还是解决了.下面就说一下解决的方法. 1.找到MySql Server Instance onfiguration Wizard管理器,重新配置mysql.如图.前面的配置可以一路下一步,到了图中这一步要修改语言为gbk. 2.要删除之前建立的数据库,重新利

从内存中写入mysql中文数据乱码解决

一. 问题 数据库编码:utf8 mysql> create database dbnameDEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 表编码:utf8 drop table if exists `test`; create table `test` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(50) default '', `create

如何解决MSSQL中文数据乱码问题

今天遇到了在数据库中直接写SQL语句,语句中包含中文,但是数据库的表里是包含"?" 的乱码. 我程序代码中,调试时得到的SQL不是乱码,在控制台中也不是乱码.但是在数据库中却出现了乱码. 当用MSSQL控制台去插入或更改中文数据时,中文字符可能会被显示成问号(??),以下提供2种解决办法: 1.在SQL里加上'N'强制转换编码   a.把所有字符字段都改成无符号类型,如:nchar,ntext,nvarchar    b.用查询分析器进行数据管理,在中文数据前加N,强制转换编码,如:i

Web中的中文参数乱码

中文参数乱码    1 get方式传参,中文乱码        修改tomcat中的配置server.xml        在修改端口的标签中添加属性URIEncoding="XXX"        <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8989" protocol="HTTP/1.1" redirectPort=

MySQL插入中文数据乱码问题

一.MySQL插入中文不乱码5中方法小结 方法一:登录mysql,先做“set names latin1;”,然后再执行更新语句或执行语句文件. 方法二:在aql文件中指定set names latin1; 然后登录mysql,通过如下命令执行. 方法三:在sql文件中指定set names latin1; 然后通过mysql命令导入数据 方法四:通过指定mysql命令的字符集参数实现--default-character-set=latin1 方法五:在配置文件里设置客户端及服务端相关参数 不

web前端-常见中文字体在CSS中的Unicode编码

一,常见中文字体在CSS中的Unicode编码 新细明体: \65b0\7ec6\660e\4f53 细明体: \7ec6\660e\4f53 标楷体: \6807\6977\4f53 黑体: \9ed1\4f53 宋体: \5b8b\4f53 新宋体: \65b0\5b8b\4f53 仿宋: \4eff\5b8b 楷体: \6977\4f53 仿宋_gb2312: \4eff\5b8b_gb2312 二,例如:font-family:’ \5b8b\4f53’;

提交中文数据乱码问题---web.xml

前端时间,做了个纯springmvc框架的一个后台系统,遇到了不少问题.特别是编码问题,让我纠结了很久.每次ajax传入数据的时候需要将form中的数据先进行编码 encodeURI(AA); 利用ajax传入后controll层 接受后需再转码 java.net.URLDecoder.decode(param, "UTF-8"); 才能将中文字符写到数据库里. 这样form中有中文的地方都需要这样做一下,突然觉得好麻烦.....可是我之前没记得传个数据这么麻烦啊.就在网上找啊找. 终