通过response对象向页面输出内容时遇到的乱码问题可分为两种情况

  1.字节流

    字节流输出时可以通过设置响应头"Content-Type"的值为"text/html;charset=UTF-8"来制定浏览器打开页面时用的编码,并在写入时通过相应编码传入字符串的字节数组,如 通过"中文".getBytes("UTF-8")获取中文部分的UTF-8编码的字节数组。

  2.字符流

    response字符流对象中存在一个缓冲区,用来将字符串转换为指定编码的字节数组,默认情况下response缓冲区的编码默认值是ISO-8859-1,因此如不加以设定,中文内容必定会呈现乱码。可以通过response.setCharacterEncoding("UTF-8")方法来设置缓冲区的编码,再通过response.setHeader("Content-Type", "text/html;charset=UTF-8");将浏览器打开页面的编码设置为与缓冲区编码相同,为了简化书写,java提供了response.setContentType("text/html;charset=UTF-8");方法代替上述两步操作。

通过request对象从请求中读取内容时遇到的乱码问题也可分为两种情况

  1.POST方式

    POST方式下,存在一个缓冲区,用来将请求体中的内容由字节流通过指定编码解码为字符流,默认情况下缓冲区的默认编码为ISO-8859-1,要解决乱码问题,只需通过request.setCharacterEncoding("utf-8"); 方法将缓冲区编码指定为UTF-8即可。

  2.GET方式

    由于在GET方式下,需要传递的内容直接存在于请求头的url后,数据的编码一般为UTF-8,而url的默认编码为ISO-8859-1,一般来说有三种方式可以解决中文乱码问题。

    (修改配置文件中uri的编码方式)

    解决方案一:修改tomcat/conf/server.xml

        <Connector port="80" protocol="HTTP/1.1"
        connectionTimeout="20000"
        redirectPort="8443" URIEncoding="utf-8"/>

    (获取乱码内容后通过ISO-8859-1编码表反向查出原始数据,再通过UTF-8码表查出正确内容)

    解决方案二:逆向编解码
        username = URLEncoder.encode(username, "ISO8859-1");
        username = URLDecoder.decode(username, "utf-8");

    解决方案三:简写的方式(推荐使用)
        username = new String(username.getBytes("ISO-8859-1"),"utf-8");

最新文章

  1. web全栈开发之网站开发一(Mac环境配置)
  2. mysql group by后 拼接某一字段
  3. PTA Insert or Merge
  4. html 动态显示元素文本
  5. Hadoop 苦旅(1)——准备以及Cygwin安装
  6. hdu 4493 Tutor
  7. UIWindow 详解
  8. Jmeter 发送json{Jfinal 接口req rsp均为json}
  9. LANMP一键安装包 版本服务任你选 可安装单一服务
  10. 201521123092《java程序设计》第四周学习总结
  11. 【转】C++ STL快速入门
  12. docker nginx letsencrypt
  13. php7带来的性能升级
  14. mybatis之接口方法多参数的三种实现方式
  15. 8 -- 深入使用Spring -- 4...5 AOP代理:基于注解的“零配置”方式
  16. Hyperledger Fabric CA User’s Guide——CA用户指南(一)
  17. Vue图片懒加载插件
  18. 论文笔记——N2N Learning: Network to Network Compression via Policy Gradient Reinforcement Learning
  19. ubuntu16.04 tensorflow pip 方式安装
  20. Android——android weight 属性(百度)

热门文章

  1. JS函数运行在它们被定义的作用域内,而不是它们被执行的作用域内
  2. [mark] Linux下如何批量删除空文件
  3. vmare centos 6.8 minimal 无法上网
  4. [转] 有java基础的人如何转行做大数据?
  5. python class metaclass instance
  6. - &gt;code vs 1475 m进制转十进制
  7. Delphi中DBChart的数据库应用
  8. [转]阿里巴巴数据库连接池 druid配置详解
  9. [转]C/C++ 程序员必须收藏的资源大全
  10. vmware备忘