首先,在刚接触这个中文乱码问题的时候,还是比较混乱的,因为针对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中文乱码问题的解决方案和区分的更多相关文章

  1. request和response中文乱码问题后台处理办法

    request接收参数的中文乱码的处理: GET: 方法一:使用String的构造方法: new String(request.getParameter("传过来的name").g ...

  2. Web jsp开发学习——终极解决jsp中request和response中文乱码的问题(加个过滤器)

    中文乱码真的很烦人的.而且每次都要写,可麻烦了,而且有时候写了还不一定管用,所以我们可以试试过滤器 1.每个jsp头上当然要写上utf8啦 <%@ page language="jav ...

  3. request、response 中文乱码问题与解决方式

    request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码:   response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码: ...

  4. jmeter解决request response中文乱码问题

    一:主要内容 解决request请求入参中文乱码问题 解决response响应数据中文乱码问题 二:解决request和response中文乱码问题 request结果:-中文已经不乱码了 respo ...

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

    原文地址:http://blog.csdn.net/xiazdong/article/details/7217022/ 一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过G ...

  6. Java_Servlet 中文乱码问题及解决方案剖析

    一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.java.nio.charset.Charset.defaultCharset() 获得 ...

  7. JSP 中文乱码显示处理解决方案

    来源: <http://blog.csdn.net/joyous/article/details/1504274> JSP 中文乱码显示处理解决方案 分类: 所有 Web前端 J2EE20 ...

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

    转自:http://blog.csdn.net/xiazdong/article/details/7217022/ 一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK ...

  9. jsp中文乱码六种情况---解决方案

    转 jsp中文乱码六种情况---解决方案 2016年10月22日 21:32:55 阅读数:10672 来源:http://blog.csdn.net/lovesummerforever/articl ...

随机推荐

  1. JS 和 a href className JS编写顺序与运行顺序 字符串或变量嵌入中括号 代替 点号 代表属性

    JS 和 a href 在href里面注意分号结尾, 引号闭合 <a href="javascript:;">空链接</a> <a href=&quo ...

  2. OpenStack 学习笔记 (三)

    个人网站:臭蛋www.choudan.net 一直苦于不知道如何加入到开源社区参与开发,感受开源社区分布式协作开发和巨神们coding的魅力,特意在网上查了资料,直接指导的很少,还得的靠官网上的文档. ...

  3. MYSQL LOGBIN 数据日志恢复数据库随笔

    查看指定的二进制日志中的事件(MYSQL命令行) mysql> show binlog events in 'binlogfullpath'; 查看二进制日志中的事件(MYSQL命令行) mys ...

  4. CC150相关问题

    18.9 动态计算中位数 利用两个堆:一个最大堆,存放小于中位数的值:一个最小堆,存放大于中位数的值. 则两个堆的堆顶即为数组中最中间的两个数. 在插入新元素的时候,我们只要维护两个堆, 使其堆中元素 ...

  5. Sqlserver函数基础使用

    函数基本功能: 转换工厂日期,将8点20之前的时间转化为前一天的时间. if exists (select * from sysobjects where xtype='fn' and name='F ...

  6. c#(winform)环境下使用动态链接库dll的详解

    1,什么是dll文件? DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被 ...

  7. 无法用Put方式请求发布在IIS中的WebAPI

    WebApi程序发布到IIS上后,无法使用Put的方式进行请求,错误信息如下:             原因和解决方案:   在IIS中默认不支持Put请求和Delete请求,因为IIS中注册的Web ...

  8. ASP.NET Core Startup类 Configure()方法 | ASP.NET Core 中间件详细说明

    ASP.NET Core 程序启动过程如下 目录 Startup 类 Configure() 方法 中间件 使用中间件 Configure 方法 的参数 IApplicationBuilder Ext ...

  9. EXP-00032: Non-DBAs may not export other users

    Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit ProductionWith the P ...

  10. 使用 ruamel.yaml 读写 yaml 文档

    官网链接: https://pypi.org/project/ruamel.yaml/ 1. 安装ruamel.yaml pip install ruamel.yaml 2. 准备yaml文件: Ch ...