Web开发中乱码问题的解决
2015-12-24 15:55
330 查看
web开发中乱码问题的解决
由于楼主刚刚接触web不久,自然而然的就遇到了乱码问题。下面就记录一下乱码问题的解决。表单的提交分为GET和POST两种请求方式。两种方式的乱码解决又不一样,用post提交请求时,只需要在接受的时候加上
request.setCharacterEncoding("utf-8");而GET的请求方法在处理时,应该将接收过来的值打碎成
ISO-8859-1编码,然后再组装成utf-8:
new String(request.getParameter(param).getBytes("iso-8859-1"),"UTF-8");
过滤器的乱码处理问题
如果每次接收都像上面那样去处理的话肯定是太麻烦了,用过滤器来处理请求的乱码问题很方便,只需要写一个过滤器,就可以过滤所有请求页面的乱码问题了。至于如何用过滤器处理乱码请参考用过滤器来解决JSP中的乱码问题。不过值得注意的是,如果使用Struts的话,在web.xml里面处理编码的过滤器必须在struts过滤器前面注册,否则所有页面都不会经过过滤器。
AJAX请求的乱码问题
如果使用ajax出现了乱码问题这样解决:前端ajax函数的请求的url里面中文参数用两个encodeURI()函数处理,
var url="user.do?p=checkUser&name="+encodingURI(encodingURI(username.value))"而服务器端则用
URLDecoder.decode()函数去接收,
string userName = URLDecoder.decode(request.getParameter("name"),"utf-8"); 这样就能够解决ajax请求中乱码的问题了。
PS:以上几条是摘自网上的。我暂时还没遇到。
在我的项目中,遇到的问题是发送get请求时出现乱码,导致这个问题的原因是,我在
web.xml文件中之配置了针对post请求的编码设置,但是tomcat对POST和GET请求的处理方式是不一样的,我们要针对GET请求出现乱码问题的解决,就需要修改tomcat下的
server.xml文件,如下所示:
将原来的配置:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
改为:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>
然而,如果你修改的是tomcat安装目录下的
server.xml文件的话,那么你在eclipse当中运行项目时会发现配置并没有起作用,这是因为eclipse在运行时用的是eclipse当中配置的tomact,所以我们需要
打开左侧项目列表server文件夹-->tomcat-->server.xml按照以上的方式做同样的修改.
!这里需要注意的是:
配置useBodyEncodingForURI="true"后,可以解决普通get请求的中文乱码问题,但是对于通过ajax发起的get请求中文依然会乱码,请把useBodyEncodingForURI="true"改为URIEncoding="UTF-8"即可。
然而经过了以上的设置之后,博主的乱码问题依然没有解决,如下图所示:
在建立一条新数据之后,显示出来的是一串的????。好吧,这时候自然而然的想到了数据库的编码问题了。于是,
sudo /ect/init.d/mysql start mysql> show variables like "%char%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
根据上面的显示我们可以发现
character-set-server和
character-set-database的编码是
latin1,所以,接下来我就要将其修改为utf8了。
// 1. 打开mysql的配置文件,ubuntu下是my.cnf lucas@lucas-ThinkPad-PC:~$ sudo vim /etc/mysql/my.cnf // 2. 在配置文件中加入以下一句 character-set-server=utf8 // 自己根据对应的需要修改的在对应的节点下添加。 // 3. 这样问题就解决了。
我是使用命令行进行修改的:
lucas@lucas-ThinkPad-PC:~$ su root@lucas-ThinkPad-PC:/home/lucas# mysql -u root -p mysql> set character_set_client=utf8; Query OK, 0 rows affected (0.00 sec) mysql> set character_set_connection=utf8; Query OK, 0 rows affected (0.00 sec) mysql> set character_set_database=utf8; Query OK, 0 rows affected (0.00 sec) mysql> set character_set_results=utf8; Query OK, 0 rows affected (0.00 sec) mysql> set character_set_server=utf8; Query OK, 0 rows affected (0.00 sec) mysql> set character_set_system=utf8; Query OK, 0 rows affected (0.01 sec) mysql> set collation_connection=utf8; Query OK, 0 rows affected (0.01 sec) mysql> set collation_database=utf8; Query OK, 0 rows affected (0.01 sec) mysql> set collation_server=utf8; Query OK, 0 rows affected (0.01 sec) mysql> show variables like 'character_set_%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) // 经过一番折腾之后,修改完毕,重启数据库,再运行一下项目,发现添加数据再也没有乱码了。
当然,除此之外,还有一些乱码的问题,例如浏览器的默认编码啊什么的。这些直接设置一下浏览器的编码就行了。还有许多我暂时还没接触到的。等博主接触到了再加上去吧。继续上班。。。。
相关文章推荐
- Orace查询数据出现乱码的问题解决思路
- oracle em 按钮乱码解决办法及em网页变成英文
- C#读取中文文件出现乱码的解决方法
- ASP编码必备的8条原则
- mysql命令提示行连接乱码的解决
- 解决Java程序使用MySQL时返回参数为乱码的示例教程
- XML指南——XML编码
- C#中字符串编码处理
- ExtJS中文乱码之GBK格式编码解决方案及代码
- 将编码从GB2312转成UTF-8的方法汇总(从前台、程序、数据库)
- 程序员趣味读物 谈谈Unicode编码
- 文本文件编码方式区别
- Jquery乱码的一次解决过程 图解教程
- C语言安全编码之数值中的sizeof操作符
- C#实现获取文本文件的编码的一个类(区分GB2312和UTF8)
- 解决realplayer11中文正式版网页右键乱码问题embed_cn.dll
- VC中BASE64编码和解码使用详解
- 计算机中的字符串编码、乱码、BOM等问题详解
- PHP附件下载中文名称乱码的解决方法