Request和Response中文乱码问题的解决方案和区分
首先,在刚接触这个中文乱码问题的时候,还是比较混乱的,因为针对request和response各自都有自己的解决方案,而且思路相似,方法也很相似,又针对get和post两种提交方式,分两种解决中文乱码的方案;针对response响应,分字节流和字符流的响应方式,所以,是两个大的方向,四个小的方向。
一:Request对象接收中文数据
1.1Post方式接收中文
/**
* 演示Post方式提交,解决中文乱码问题
*/
public class RequestDemo extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
* 产生乱码的原因:
* post提交的数据在请求体中,request对象接收到数据之后,会将数据放入到request缓冲区,缓冲区有默认编码:ISO-8859-1:不支持中文;
*
* 解决方案:
* 将request缓冲区的编码更改就行了
*
*/
request.setCharacterEncoding("UTF-8");
String parameter = request.getParameter("name");
System.out.println("姓名:"+parameter); }
1.2get方式提交接收中文
/**
* 产生乱码的原因:
* get提交的数据在请求行url后面,在地址栏其实已经进行了一次编码(默认:ISO-8859-1:对中文不友好)
*
* 解决方案:
* 将存入request缓冲区的数据以默认的方式接收,但以UTF-8的方式解码
*/
String name=request.getParameter("name");
String param=new String(name.getBytes("ISO-8859-1"),"UTF-8");
System.out.println("姓名:"+parameter);
二:Response响应数据的时候中文乱码问题及解决方案
2.1使用字节流方式响应中文
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
* 使用字节流响应中文
*/
//ServletOutputStream outputStream = response.getOutputStream();
//outputStream.write("中文".getBytes());
/**
* 以上这种方式是否能够避免不出现中文乱码问题呢?
* 不一定:
* 中文乱码的产生与中文转化成字节数组和浏览器打开方式(打开时采用的默认字符集)有关
*
* 解决方案:
* 将中文转化成数组的字符集和浏览器打开时候的字符集一致就行
*/
ServletOutputStream outputStream = response.getOutputStream();
//设置浏览器打开时默认的字符集
response.setHeader("Conten-Type", "text/html;charset=UTF-8");
//设置中文转换成字节组的字符集编码
outputStream.write("中文大师".getBytes("UTF-8"));
2.2使用字符流的方式响应中文
/**
* 字符流的方式响应中文
*/
response.getWriter().print("中文大侠");
/**
* 使用上述代码向页面输出中文是否会产生乱码?
* 一定乱码
* 原因:
* 字符流是有缓冲区的,response获得字符流,response设计默认的缓冲区编码是ISO-8859-1。
* 解决: 设置response获得字符流缓冲区的编码字符集(这句话体现在:response.getWriter(),详情请看API)和
* 设置浏览器默认打开时候采用的字符集一致即可。
*
*/ // 设置浏览器打开时默认的字符集
response.setHeader("Conten-Type", "text/html;charset=UTF-8");
//设置response获得字符流缓冲区的编码字符集
response.setCharacterEncoding("UTF-8");
//响应到浏览器
response.getWriter().print("胡春春和阿珠"); //下面是一种简化的方式(推荐记住和掌握)
response.setContentType("text/html;charset=UTF-8");
response.getWriter().print("胡春春和阿珠");
Request和Response中文乱码问题的解决方案和区分的更多相关文章
- request和response中文乱码问题后台处理办法
request接收参数的中文乱码的处理: GET: 方法一:使用String的构造方法: new String(request.getParameter("传过来的name").g ...
- Web jsp开发学习——终极解决jsp中request和response中文乱码的问题(加个过滤器)
中文乱码真的很烦人的.而且每次都要写,可麻烦了,而且有时候写了还不一定管用,所以我们可以试试过滤器 1.每个jsp头上当然要写上utf8啦 <%@ page language="jav ...
- request、response 中文乱码问题与解决方式
request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码: response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码: ...
- jmeter解决request response中文乱码问题
一:主要内容 解决request请求入参中文乱码问题 解决response响应数据中文乱码问题 二:解决request和response中文乱码问题 request结果:-中文已经不乱码了 respo ...
- [转]Servlet 中文乱码问题及解决方案剖析
原文地址:http://blog.csdn.net/xiazdong/article/details/7217022/ 一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过G ...
- Java_Servlet 中文乱码问题及解决方案剖析
一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.java.nio.charset.Charset.defaultCharset() 获得 ...
- JSP 中文乱码显示处理解决方案
来源: <http://blog.csdn.net/joyous/article/details/1504274> JSP 中文乱码显示处理解决方案 分类: 所有 Web前端 J2EE20 ...
- Servlet 中文乱码问题及解决方案剖析
转自:http://blog.csdn.net/xiazdong/article/details/7217022/ 一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK ...
- jsp中文乱码六种情况---解决方案
转 jsp中文乱码六种情况---解决方案 2016年10月22日 21:32:55 阅读数:10672 来源:http://blog.csdn.net/lovesummerforever/articl ...
随机推荐
- laravel之注册中间件
1.添加中间件的命令:php artisan make:middleware 中间件名称 2.给中间件指定key值:在kernel.php中 3.在中间件中添加逻辑代码
- 前端把html表格生成为excel表格
最近公司改后台管理系统.要求导出台账项目等等为excel表格,找半天还真有,他是通过query.table2excel.js 实现,原谅我原生不会弄这个当然大家有可以给我留言. <!DOCTYP ...
- win10命令控制符
IP:ipconfigIP地址侦测器:Nslookup显卡:dxdiag控制面板:control电话拨号:dialer木马捆绑工具,系统自带:iexpress本地用户和组:lusrmgr.msc鼠标属 ...
- zabbix共享内存报错cannot create semaphore set
zabbix共享内存报错 cannot open log: cannot create semaphore set: [28] No space left on device 报错原因: kernel ...
- linux 三大利器 grep sed awk sed
sed主要内容和原理介绍 sed 流处理编辑器 sed一次处理一行内容,读入一行处理一行 sed不改变文件内容(除非重定向) sed 命令行格式 $ sed [options] 'command' f ...
- except but
He didn't speak anything but Greek... 他只会说希腊语.The crew of the ship gave them nothing but bread to ea ...
- jq复制到剪切板插件clipboard.min.js(兼容IE9)
/*! * clipboard.js v1.5.5 * https://zenorocha.github.io/clipboard.js * * Licensed MIT 漏 Zeno Rocha * ...
- css3优惠券
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8" /> <title&g ...
- python的*args和**kwargs基础用法
*args表示任何多个无名参数,它是一个tuple **kwargs:传入的字典,就如:a=1,传入键值,默认就传入到**kwargs中,如下面代码: class FOO: def __init__( ...
- ApplicationEventPublisher笔记
ApplicationEventPublisher是ApplicationContext的父接口之一.这接口的作用是:Interface that encapsulates event publica ...