美文网首页源码解析Servlet
web开发中乱码问题的解决

web开发中乱码问题的解决

作者: ferdinand_hx | 来源:发表于2017-12-20 17:34 被阅读13次

    web开发中乱码问题的解决

    由于楼主刚刚接触web不久,自然而然的就遇到了乱码问题。下面就记录一下乱码问题的解决。

    1. 表单的提交分为GET和POST两种请求方式。两种方式的乱码解决又不一样,用post提交请求时,只需要在接受的时候加上request.setCharacterEncoding("utf-8"); 而GET的请求方法在处理时,应该将接收过来的值打碎成 ISO-8859-1编码,然后再组装成utf-8:new String(request.getParameter(param).getBytes("iso-8859-1"),"UTF-8");
    1. 过滤器的乱码处理问题

    如果每次接收都像上面那样去处理的话肯定是太麻烦了,用过滤器来处理请求的乱码问题很方便,只需要写一个过滤器,就可以过滤所有请求页面的乱码问题了。至于如何用过滤器处理乱码请参考用过滤器来解决JSP中的乱码问题。不过值得注意的是,如果使用Struts的话,在web.xml里面处理编码的过滤器必须在struts过滤器前面注册,否则所有页面都不会经过过滤器。

    1. 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:以上几条是摘自网上的。我暂时还没遇到。

    1. 在我的项目中,遇到的问题是发送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-servercharacter-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)
    // 经过一番折腾之后,修改完毕,重启数据库,再运行一下项目,发现添加数据再也没有乱码了。
    

    当然,除此之外,还有一些乱码的问题,例如浏览器的默认编码啊什么的。这些直接设置一下浏览器的编码就行了。还有许多我暂时还没接触到的。

    相关文章

      网友评论

        本文标题:web开发中乱码问题的解决

        本文链接:https://www.haomeiwen.com/subject/hgxnwxtx.html