首先,在刚接触这个中文乱码问题的时候,还是比较混乱的,因为针对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. CSS知多少

    1.Cascading Style Sheets 层叠样式表 2.层叠就是浏览器对多个样式来源进行叠加,最终确定结果的过程. 3. 样式的5大来源:浏览器默认样式.浏览器用户自定义样式.行内样式.内部 ...

  2. js API列表

    //  主要是ES的API和一小部分浏览器的API. //  新加入标准的API有可能是浏览器事实上早已实现的. //   ECMAScript目前是每年都会发布新版本(目前已经相对稳定,每年都会又增 ...

  3. 修改maven默认的jdk版本

    修改maven默认的jdk版本,想改彻底需要在maven的全局配文件(settings.xml)增加以下信息:   在profiles 节点下增加: <profile> <id> ...

  4. Software Testing Techniques Homework 1

    I have met some errors in recent years, one of them which impress me most. It happend when I try to ...

  5. C# WinForm窗体及其控件自适应各种屏幕分辨率

    C# WinForm窗体及其控件自适应各种屏幕分辨率 一.说明  我们自己编写程序的界面,会遇到各种屏幕分辨率,只有自适应才能显的美观.实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置 ...

  6. Python学习---迭代器学习1210

    可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的generator fun ...

  7. 乘风破浪:LeetCode真题_001_TwoSum

    乘风破浪:LeetCode真题_001_TwoSum 一.前言 沉寂了很长时间,也悟出了很多的道理,写作是一种业余的爱好,是一种自己以后学习的工具,是对自己过往的经验积累的佐证,是检验自己理解深入度的 ...

  8. 10G client连接数据库

    tnsnames.ora文件中的名字一定要顶格写(前面不留空格),不然连接时会如下报错. 已使用的参数文件:F:\oracle\product\10.2.0\client_1\network\admi ...

  9. [DBSDFZOJ 多校联训] 就

    就 背景描述 一排 N 个数, 第 i 个数是 Ai , 你要找出 K 个不相邻的数, 使得他们的和最大. 请求出这个最大和. 输入格式 第一行两个整数 N 和 K. 接下来一行 N 个整数, 第 i ...

  10. c++计算器后续(3)

    自娱自乐: 本来只是想改改第二次的代码规范的,然后好像把原来的代码玩坏了,真是尴尬...然后大概是又发现了一些东西.以上. main的参数: 大概是说main函数的括号里是可以带参数的,写成这个样子: ...