zoukankan      html  css  js  c++  java
  • 乱码解决问题

    在项目开发中常常遇到乱码问题,使我们很苦恼,下面我介绍经常遇见的乱码问题以及相应的解决办法。

    1.post方式提交中文数据乱码产生的原因和解决办法

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

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

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    /**
    * 客户端是以UTF-8编码传输数据到服务器端的,所以需要设置服务器端以UTF-8的编码进行接收,否则对于中文数据就会产生乱码
    */
    request.setCharacterEncoding("UTF-8");//使用request.setCharacterEncoding("UTF-8");设置服务器以UTF-8的编码接收数据后,此时就不会产生中文乱码问题了
    String userName = request.getParameter("userName");
    System.out.println("userName:"+userName);
    }

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

    对于以get方式传输的数据,request即使设置了以指定的编码接收数据也是无效的,默认的还是使用ISO8859-1这个字符编码来接收数据,客户端以UTF-8的编码传输数据到服务器端,而服务器端的request对象使用的是ISO8859-1这个字符编码来接收数据,服务器和客户端沟通的编码不一致因此才会产生中文乱码的。解决办法:在接收到数据后,先获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题。

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    /**
    *
    * 对于以get方式传输的数据,request即使设置了以指定的编码接收数据也是无效的,默认的还是使用ISO8859-1这个字符编码来接收数据
    */
    String name = request.getParameter("name");//接收数据
    name =new String(name.getBytes("ISO8859-1"), "UTF-8") ;//获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题
    System.out.println("name:"+name);
    }

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

    <a href="${pageContext.request.contextPath}/servlet/RequestDemo05?userName=gacl&name=海颐软件">点击</a>

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

    1 String name = request.getParameter("name");

    2 name =new String(name.getBytes("ISO8859-1"), "UTF-8");

    另外,需要提的一点就是URL地址后面如果跟了中文数据,那么中文参数最好使用URL编码进行处理,如下所示:

    <a href="${pageContext.request.contextPath}/servlet/RequestDemo05?userName=gacl&name=<%=URLEncoder.encode("徐达沛", "UTF-8")%>">点击</a>

  • 相关阅读:
    Linux Shell基础 单引号、双引号、反引号、小括号和大括号
    Linux Shell基础 通配符
    Linux Shell基础 管道符和grep命令
    Linux Shell基础 多个命令中的分号(;)、与(&&) 、 或(||)
    Linux Shell基础 Shell的输入重定向和输出重定向
    Linux Shell基础 Bash常见命令 history、alias命令以及常用快捷键
    Linux Shell基础 Bash常见命令 echo命令
    Linux Shell基础 Shell基本知识
    Linux文件系统管理 swap分区及作用
    《Hadoop权威指南 第4版》
  • 原文地址:https://www.cnblogs.com/zhangzhiqin/p/8127332.html
Copyright © 2011-2022 走看看