post、get请求乱码问题

乱码可能出现在哪里

  • 数据“传递”过程中的乱码
  • 数据“展示”过程中的乱码
  • 数据“保存”过程中的乱码

数据“展示”过程中的乱码

  1. 在response获取标准输出流之后,使用标准输出流输出到浏览器上中文的时候,出现的乱码。

  2. 解决方案

    response.setContentType("text/html;charset=UTF-8");
    

数据“保存”过程中的乱码

  1. 数据最终保存到数据库的时候,表中存储的数据出现乱码问题

  2. 数据库表中存储的数据出现乱码,为什么?

    • 可能是在保存之前就已经出现乱码,保存到数据库表中的数据一定是乱码
    • 保存之前数据没有出现乱码,但是数据库本身不支持简体中文,也可能出现乱码
  3. 解决方案

    • 若保存之前就是乱码,和数据库没有关系,先解决保存之前的乱码问题
    • 让数据库本身支持简体中文

数据“传递”过程中的乱码

  1. 浏览器提交数据给服务器,在传送的过程中出现中文乱码问题

  2. 为什么在传递过程中会出现乱码呢?

    • 浏览器在提交表单数据的时候,不管这个语言是哪个国家的语言,不管这个文字是哪个国家的文字,都是采用ISO-8859-1的这种编码方式提交数据的。
    • 也就是说,在网络中传送的数据包中涉及到文字的话,该文字一定是ISO-8859-1的编码方式
    • 发送给Tomcat服务器之后,Tomcat服务器接收到数据,只是接收到一堆ISO-8859-1编码方式的数据,不知道该数据以前是哪个国家的文字
    • 浏览器是这样提交数据的:username=%E5%BC%A0%E4%B8%89
    • %E5%BC%A0%E4%B8%89是ISO-8859-1的编码方式编码之后的数据,以前是什么,不知道
  3. 解决方案

    1)第一种方案:万能方案,适合于所有的请求,包括GET请求和POST请求

    • 将从request对象中获取到的数据,经过ISO-8859-1的编码方式进行解码还原,回归最原始的二进制码
    • 再找一种编码方式,这种编码方式和浏览器页面的编码方式相同,进行重新编码

    2)第二种方案:只能解决POST请求中的乱码问题

    request.setCharacterEncoding("UTF-8");
    
    • 以上代码在从request对象中获取任何数据之前设置有效果
    • 以上的代码只对请求体中的数据进行编码,无法对请求行上的数据进行编码,所以只能解决POST,不能解决GET

    3)第三种方案:只能解决GET请求中的乱码问题

    • 修改CATALINA_HOME/conf/server.xml文件
    <Connector port="80" protocol="HTTP/1.1"
    			        connectionTimeout="20000"
    			        redirectPort="8443"
    				URIEncoding="UTF-8"/>
    
    • server.xml文件中的Connector标签中的属性
      • port 设置端口号
      • URIEncoding 设置URI的编码方式
      • maxThreads 设置Tomcat服务器可支持的最大线程数量
      • ......

结论

  1. 为了避免乱码的出现,建议整个工程中凡是涉及到编码方式的,最好所有的编码方式统一。
  2. 数据库的编码方式、HTML页面的编码方式、java程序中使用的编码方式、myeclipse工作区的编码方式....都采用UTF-8
posted @ 2021-09-02 12:23  SEVEN_CCODE  阅读(66)  评论(0)    收藏  举报