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

时间: 2024-07-30 09:05:36

servlet中文乱码问题的相关文章

[转]Servlet 中文乱码问题及解决方案剖析

一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码: 3.getBytes() 是通过平台默认字符集进行编码: 二.中文乱码出现 在学习任何一门技术时,经常会有初学者遇到中文乱码问题,比如MySQL,是因为在安装时没有设置:而在Servlet中,也会遇到中文乱码问题: 比如: OutputStream out = response.

Servlet中文乱码问题解决办法

首先对于源jsp网站和servlet里面的字符集要一样,一般支持中文的字符集为UTF-8最好采用这个字符集(除此之外还有gb2312); 对于源jsp文件的代码中需要设置 设置你的page里面的字符集 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 设置html文件里面的字符集 <meta http-eq

jsp与servlet中文乱码问题(转)

大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着大家,现把JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考.首先了解一下Java中文问题的由来: Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦.原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题.首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流

Servlet 中文乱码问题及解决方案剖析

一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码: 3.getBytes() 是通过平台默认字符集进行编码: 二.中文乱码出现 在学习任何一门技术时,经常会有初学者遇到中文乱码问题,比如MySQL,是因为在安装时没有设置:而在Servlet中,也会遇到中文乱码问题: 比如: OutputStream out = response.

[原]过滤器解决Servlet中文乱码

一.问题描述:Servlet接收来自JSP页面的中文参数时,在Servlet文件中编写输出语句,控制台输出中文乱码. (乱码问题以前经常碰到,改编码格式相当麻烦) 利用过滤器解决方法可以一次性解决问题 1.过滤器在此方法的作用:每当程序要运行Servlet文件之前,都要去执行过滤器文件:在过滤器文件中编写要在Servlet文件之前运行的代码. 2.实现过程:分为两步(1.编写过滤器类.2.编写配置文件) 1.过滤器类 (1).在src文件下建个包 com.filter (2).在此包下新建类  

java servlet 中文乱码

在servlet中向控制台输出中文乱码: 但是在servlet里的main函数输出,中文是正确的: 通过在main函数里加了一段 System.out.println(Charset.defaultCharset()); 发现在run main函数时,defaultCharset是 utf-8 但是在run servlet时,defaultCharset是Windows-1252

【转载】Servlet 中文乱码问题及解决方案剖析

转自:http://blog.csdn.net/xiazdong/article/details/7217022 一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码: 3.getBytes() 是通过平台默认字符集进行编码: 二.中文乱码出现 在学习任何一门技术时,经常会有初学者遇到中文乱码问题,比如MySQL,是因为在安装时没有设

Servlet中文乱码原因 解决 Get 和 Post 和客户端

一.Get方式的中文乱码 1) 使用如下页面表单内容: <form action="http://127.0.0.1:8080/day07/params" method="get"> 用户名:<input name="username" type="text" /><br/> 密 码:<input name="password" type="passwor

jsp+servlet 中文乱码问题

一. 由于doget和dopost的处理方式不同,在做servlet的时候遇到这样一个问题:用doPost获得的参数只要加上“request.setCharacterEncoding("utf-8")”这样一行,则显示中文不会乱码,但是用doGet获得的参数加上“request.setCharacterEncoding("utf-8")”这一行后却依然乱码,解决方法如下: 1.这一个是一劳永逸的方法,从网上找到的    在你的Tomcat服务器根目录下找到conf/