zoukankan      html  css  js  c++  java
  • servlet中文乱码问题

        

    通过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");

  • 相关阅读:
    Ext.Net中,文件下载。
    Ext.Net中,DataView数据绑定之使用技巧。
    Ext.Net控件,简单案例1,让我们从Hello World开始,走进Ext.Net控件的世界!。
    VSCode入门设置成中文
    S2T40,第四章,简答4
    MongoDB学习笔记三:查询
    初等数论学习笔记一:整除的概念与带余除法
    MongoDB学习笔记四:索引
    初等数论学习笔记二:最大公因数与辗转相除法
    MongoDB学习笔记二:创建、更新及删除文档
  • 原文地址:https://www.cnblogs.com/RedHatPhenix/p/5588629.html
Copyright © 2011-2022 走看看