servlet中文乱码问题

    

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

  1.字节流java

    字节流输出时能够经过设置响应头"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");方法代替上述两步操做。tomcat

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

  1.POST方式url

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

  2.GET方式server

    因为在GET方式下,须要传递的内容直接存在于请求头的url后,数据的编码通常为UTF-8,而url的默认编码为ISO-8859-1,通常来讲有三种方式能够解决中文乱码问题。xml

    (修改配置文件中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");

相关文章
相关标签/搜索