首先,在刚接触这个中文乱码问题的时候,还是比较混乱的,因为针对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("胡春春和阿珠");

最新文章

  1. 【WPF】释放图像资源, [删除时报另一进程占用]
  2. 获得appstore里面app的最新的版本信息,进行版本更新
  3. Python 实现发送、抄送邮件功能
  4. Discuz! 6.x/7.x 全局变量防御绕过导致命令执行
  5. Iso8601 日期格式
  6. EXTJS 4.2 添加滚动条
  7. LinearLayout增加divider分割线
  8. JS获取图片实际宽高
  9. 2017-2018-1 Java演绎法 小组成员贡献量汇总
  10. vue调用Moment显示时间
  11. Vue2 第四天学习(Vue的生命周期)
  12. TCP 链接 存在大量 close_wait 等待
  13. 潭州课堂25班:Ph201805201 爬虫高级 第一课 pyspider框架 (课堂笔记)
  14. [转]IP地址介绍
  15. 二叉树 c++
  16. 问题记录 | PyLint not recognizing cv2 members
  17. echarts y轴,显示数据,但不显示竖线
  18. JS高级 2
  19. 完美解决github访问速度慢[转]
  20. 洛谷【P3908】异或之和

热门文章

  1. CentOS6.5(1)----设置静态IP并禁用IPV6
  2. 关于modelmap.addAttribute("",)转到jsp页面获取不到值的问题
  3. Android 录制视频
  4. python装饰器 高阶函数 函数闭包
  5. 路飞学城知识点3缓存知识点之一Djang自带的缓存
  6. SQL SERVER占用CPU过高优化S
  7. c#之委托事件(DelegateEvent)
  8. --Too small initial heap for new size specified
  9. 辉光的UIView
  10. cocos2dx中node的pause函数(lua)