• 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");

  • 相关阅读:
    Asp.Net api接口
    Android Studio 插件官网
    Android官方培训课程中文版(v0.9.5)
    asp.net:验证控件中ValidationExpression的写法
    asp.net:录入数据库的中文变问号
    asp.net:repeater嵌套(常用于新闻等在首页归类显示)
    asp.net:用类来后台绑定数据源
    代码编写横屏的UIView
    MFC去掉win7玻璃效果
    iOS UITableView
  • 原文地址:https://www.cnblogs.com/RedHatPhenix/p/5588629.html
Copyright © 2020-2023  润新知