zoukankan      html  css  js  c++  java
  • PrintWriter out = response.getWriter();乱码解决

             resopnse  request的乱码问题

    今天在改项目时,发现这个简单又容易忽视在问题。说起这个问题,比较简单,但也比较容易忽视。下面就具体讲讲这个问什么会出现乱码问题。

    request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码;
     
    response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码;

    乱码产生的原因:不管是request乱码还是response乱码,其实都是由于客户端(浏览器)跟服务器端采用的编码格式不一致造成的。以request乱码为例:浏览器向服务器发送请求,因为浏览器与服务器之间的通信实质上是socket流,所以要先将请求参数(字符)转换成字节,换成二进制的格式,服务器接收到请求参数后进行解码(字节转字符),然后封装到request对象中。如果客户端的编码与服务器端的解码不统一,就会导致通过request获取到的请求参数的值是乱码。   总之一句话,就是,客户端和服务器编码不一致所造成的,。

    解决:
    一、response乱码

    服务器发给浏览器的数据默认是按照ISO-8859-1编码,浏览器接收到数据后按照默认的字符集进行解码后显示,如果浏览器的默认解码字符集不是ISO-8859-1,就出现乱码。
    1.设置服务器端的编码
    response.setCharacterEncoding("utf-8”);
    默认是ISO-8859-1;该方法必须在response.getWriter()之前进行设置
    2.
    response.setContentType("text/html;charset=utf-8”);
    等同于response.setHeader("contentType", "text/html;charset=utf-8”);它其实会覆盖response.setCharacterEncoding("utf-8”)
    一、request乱码

    从浏览器发起的访问方式有三种:在地址栏直接输入URL访问、点击页面中的超链接访问、提交表单访问,

    所以对于request乱码,只需要在服务器端设置相应的解码格式即可

    post

    1.表单提交request.setCharacterEncoding("utf-8”)

    2.get

    在在tomcat的server.xml中,设置元素的属性URIEncoding="UTF-8”,注意:1、设置元素的属性useBodyEncodingForURI=“true”,意思是请求体和uri使用相同的编码格式。通过设置这两个属性,既可以解决get方式的乱码,又可以解决

    post方式的乱码。
    另外注意在所有页面都采用同一编码,例如(都是gbk或者都是utf-8)这样,避免出现页面乱码问题。
  • 相关阅读:
    AlwaysOn 执行备份任务
    SQL Server 2016 + AlwaysOn 无域集群
    IIS负载均衡
    利用mapWithState实现按照首字母统计的有状态的wordCount
    DStream转为DF的两种方式(突破map时元组22的限制)
    java.lang.reflect.InvocationTargetException at shade.com.datastax.spark.connector.google.common.base.Throwables.propagate(Throwables.java160)
    java学习路线
    Java线程间通信
    多线程对象及变量的并发访问
    Java多线程基础
  • 原文地址:https://www.cnblogs.com/taiyanhong/p/7510015.html
Copyright © 2011-2022 走看看