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

response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码;
乱码产生的原因:不管是request乱码还是response乱码,其实都是由于客户端(浏览器)跟服务器端采用的编码格式不一致造成的。
以request乱码为例:浏览器向服务器发送请求,因为浏览器与服务器之间的通信实质上是socket流,所以要先将请求参数(字符)转换成字节,也就是编码过程,服务器接收到请求参数后进行解码(字节转字符),然后封装到request对象中。如果客户端的编码与服务器端的解码不统一,就会导致通过request获取到的请求参数的值是乱码。
解决乱码:
一、response乱码
服务器发给浏览器的数据默认是按照ISO-8859-1编码,浏览器接收到数据后按照默认的字符集进行解码后显示,如果浏览器的默认解码字符集不是ISO-8859-1,就出现乱码。
对于response乱码,只需要在服务器端指定一个编码字符集,然后通知浏览器按照这个字符集进行解码就可以了。有三种方式:
1、response.setCharacterEncoding("utf-8”);//设置服务器端的编码,默认是ISO-8859-1;该方法必须在response.getWriter()之前进行设置
response.setHeader("contentType", "text/html; charset=utf-8”);//通知浏览器服务器发送的数据格式是text/html,并要求浏览器使用utf-8进行解码。
2、response.setContentType("text/html;charset=utf-8”);//等同于response.setHeader("contentType", "text/html; charset=utf-8”);它其实会覆盖
response.setCharacterEncoding("utf-8”) ,在开发中只需要设置response.setContentType("text/html;charset=utf-8”)就可以了。意思是通知浏览器服务器发送的数据格式是text/html,服务器采用utf-8编码,并要求浏览器使用utf-8进行解码。
3、response.setCharacterEncoding("utf-8”);//设置服务器端的编码为utf-8
response.getWriter().println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>”);//要求浏览器使用utf-8进行解码
可以看出,第二种方式是最简便的,这也是我们在开发中最常使用的方式。
二、request乱码
从浏览器发起的访问方式有三种:在地址栏直接输入URL访问、点击页面中的超链接访问、提交表单访问。第一种访问方式浏览器默认将参数按照utf-8进行编码,后面两种访问方式浏览器将参数按照当前页面的显示编码进行编码。所以对于request乱码,只需要在服务器端设置相应的解码格式即可。由于访问方式不同,浏览器对参数的编码格式也不同,为了方便处理,通过超链接和表单的访问也规定必须是utf-8格式,即显示当前页面的编码也要使用utf-8,这样浏览器将统一使用utf-8对参数进行编码。
在服务器端,通过request.setCharacterEncoding("utf-8”)即可设置服务器的解码为utf-8(默认是ISO-8859-1),但是它只对请求体里面的参数有效;如果参数跟在请求行中的uri后边,它就无能为力了。因此请求方式不同,解决乱码的方案也不同。
1、post方式
post方式属于表单提交,参数存在于请求体中,通过request.setCharacterEncoding("utf-8”)即可解决乱码。
2、get方式
get方式提交的参数会跟在请求行中的uri后边,服务器按照默认的iso-8859-1进行解码,这时候解决乱码有两种办法:
办法一:修改服务器端对uri参数的默认编码
在tomcat的server.xml中,设置<Connector ….>元素的属性URIEncoding="UTF-8”即可。(默认没有设置此属性)
例如:<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8”/>
注意:1、设置<Connector ….>元素的属性useBodyEncodingForURI=“true”,意思是请求体和uri使用相同的编码格式。通过设置这两个属性,既可以解决get方式的乱码,又可以解决     post方式的乱码。2、通过修改server.xml指定服务器对get和post统一按照utf-8解码,要求tomcat管理下的所有web应用都要使用utf-8编码,即所有的jsp、html页面都使用utf-8编码。比如 JSP页面的头信息是这样的:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"]]>
<html]]>
<head]]>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"]]>
<title]]>Insert title here</title]]>
</head]]>

办法二:逆向操作
参数从浏览器到服务器,经过客户端utf-8编码,服务器端iso-8859-1解码,最终成为乱码。那我们将乱码进行相反的编解码,即可得到正常的参数值。
例如:String name = request.getParameter("name”);//得到乱码    
name = new String(name.getBytes("iso-8859-1"),"utf-8”);//得到正常的name值     
注意:name.getBytes();如果不指定编码,默认按照gb2312进行编码。

转载于:https://www.cnblogs.com/caowei/p/2013-12-11_request-response.html

request和response的中文乱码问题相关推荐

  1. 用户注册(request,get和post中文乱码)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. Response响应的中文乱码问题

    乱码呈现 乱码解释 乱码解决 初步解决 改进版 精华版 在这里介绍了Request请求参数中文乱码问题,以及Response响应,下面我们介绍Response响应的中文乱码问题 乱码呈现 先来一个资源 ...

  3. 解决中文乱码问题--response.addHeader/setHeader

    标题解决中文乱码问题–response.addHeader java后端 //中文乱码解决resp.addHeader("filename", java.net.URLEncode ...

  4. jsp java乱码转换_JSP中文乱码问题《转》

    之前总是碰到JSP页面乱码的问题,每次都是现在网上搜,然后胡乱改,改完也不明白原因. 这次正好作下总结,中文乱码就是因为编码不符,可能出现乱码有四个地方: 1 JSP编码乱码 2 HTML编码乱码 3 ...

  5. request、response揭秘(备java基础,servlet,jsp,javaee)-任亮-专题视频课程

    request.response揭秘(备java基础,servlet,jsp,javaee)-3658人已学习 课程介绍         掌握Request对象的作用,期属性,response特点. ...

  6. Eclipse中 .jsp 文件中文乱码

    之前总是碰到JSP页面乱码的问题,每次都是直接去网上搜,然后胡乱改,改完也不明白原因.这次正好做一下总结,中文乱码就是因为编码不符,可能出现乱码有五个地方: JSP编码乱码 HTML编码乱码 requ ...

  7. java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别

    java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别 参考文章: (1)java ...

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

    request.response 中文乱码问题与解决方式 request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码: response乱码指的是:服务器向 ...

  9. request和response对象如何解决中文乱码问题?

    出现中文乱码的问题,一般的原因编码和和解码不一致造成的. 1 /* 2 乱码:编码和解码不一致导致的 3 GET:你好 4 POST:?????? 5 tomcat版本:8.5及以上版本 6 GET请 ...

最新文章

  1. 在C# Express 2005中配置 NUnit
  2. WinForm 实现验证码
  3. zigzag扫描matlab,ZIGZAG扫描的MATLAB实现 | 学步园
  4. 阿里云centos 6.5 32位安装可视化界面的方法
  5. [转][linux]简单的linux下的tcp/udp
  6. 深度学习pytorch--多层感知机(一)
  7. dbscan java_DBSCAN算法的Java,C++,Python实现
  8. ie com接口 php_PHP webservie连接.net接口
  9. RecyclerView实现多type页面
  10. 一个月面试近 20 家,拿下阿里 Offer!
  11. 移动开发平台收入对比
  12. 2018leetcode算法面试题汇总部分解答
  13. java diamond 有什么用_Diamond语法何时在Java 8中不起作用?
  14. 万人规模互联网公司的企业IT基础架构概览
  15. CentOS6启用密钥登陆
  16. 宝洁中国CIO沈锋:全球日化巨头是如何做数字化的|数字思考者50人
  17. 新手播音小白,想学播音从什么地方开始?
  18. Connection error: QRedisClient compiled without ssh support
  19. VS2015编译适用于XP系统sp3的dll全过程-无需vs2015运行库
  20. 苹果手机(ipone)点击元素,事件不执行

热门文章

  1. 第三章:使用 FildElements 来练习元素定位
  2. Cocos2d-x中使用第三方so库
  3. HDU 5876 关于补图的bfs
  4. android中画弧函数canvas.drawArc()之理解
  5. jQuery中append、appendTo、prepend、prependTo、before、insertBefore、after与insertAfter方法注意事项...
  6. Flex 给PopUpButton 设置皮肤
  7. 自动生成三层结构代码(2)--生成实体类
  8. 数据不够,游戏来凑!随机三维人物实现可泛化的行人再辨识(ReID)
  9. 阿里巴巴开源通用机器学习算法平台Alink
  10. C语言?看女程序员是怎么往死里坑师兄的