您的位置:首页 > 其它

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)
// 经过一番折腾之后,修改完毕,重启数据库,再运行一下项目,发现添加数据再也没有乱码了。


当然,除此之外,还有一些乱码的问题,例如浏览器的默认编码啊什么的。这些直接设置一下浏览器的编码就行了。还有许多我暂时还没接触到的。等博主接触到了再加上去吧。继续上班。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息