`

request和response的中文乱码问题

    博客分类:
  • J2EE
 
阅读更多
request和response的中文乱码问题
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进行编码。
分享到:
评论

相关推荐

    RestSharp 组件 修改接口返回中文乱码的问题

    RestSharp 在请求接口的时候,返回中文的话,一些特殊编码,比如gbk,从Response中解析出来的值会乱码,修改了一点点源代码,留一下记录以免忘记 该版本是github上,最新一个版本。下载时间是 20170821

    中文乱码解决方法(已验证).docx

    中文乱码解决方法 1、常识了解 2、中文乱码出现 3、response中文乱码 4、request乱码问题

    asp.net中文乱码:asp.net(C#)中文乱码问题

    asp.net默认的编码是UTF-8 ...当你要在aspx页面上进行传中文参数时会出现乱码 asp.net中文乱码:asp.net(C#)中文乱码问题 &lt;-----request.aspx--接收参数页-----&gt; &lt;----response.aspx--传送参数页-----&gt;

    输出word文件中文乱码问题解决打包下载

    string path = request.PhysicalPath;//获取客户端请求的文件的物理地址 if (File.Exists(path)) { string fileName = System.IO.Path.GetFileName(path); // 获取文件的名字 if (Request.UserAgent.Contains(...

    Ajax request response 乱码解决方法

    此功能已进入试用一周了,都没有问题,奇怪的是今天出现了问题?? 代码如下:AjaxRequestObj.createEqStatusParameter=function() { if (eqStatusArray.length &lt; 1) { return; } var paramNameArray = new Array...

    数据库测试test.sql

    // //解决POST表单的中文乱码问题 // request.setCharacterEncoding("utf-8"); // //接收method属性的值 // String methodName = request.getParameter("method"); // // //根据method属性的值调用相应的方法 // if...

    乱码问题解决方案

    一、有关中文乱码: mysql部分: url配置:jdbc:mysql://localhost:3306/XXX?useUnicode=true&characterEncoding=utf8 jdbc:mysql://localhost:3306/XXX?useUnicode=true&amp;characterEncoding=utf8 创建...

    response响应数据变成???&使用jquery发送带中文参数数据的get请求得到响应数据乱码解决过程

    一. response响应数据变成???的说明 request请求数据设置编码使用...使用jquery发送带中文参数数据的get请求得到响应数据乱码 get: post: 执行过程: 使用jquery发送post和get请求时,请求端和响应端均设置了编码,为

    中文编码问题.zip

    解决中文乱码问题的几个实例,其中有jsp页面,request和response的,几种编码解决小案例;

    在FireFox/IE下Response中文文件名乱码问题解决方案

    发现很多园子里的人在处理Response下载文件名是使用这个方法 Response.AppendHeader(“Content-Disposition”, “attachment;filename=” + HttpUtility.UrlEncode(fileInfo.Name, System.Text.Encoding.UTF8)); 但...

    解决python3中的requests解析中文页面出现乱码问题

    (3) 但是如果你访问另一个属性text时,会返回一个unicode对象,乱码问题就会常常发成在这里。 (4) 因为Response对象会通过另一个属性encoding来将字节码编码成unicode,而这个encoding属性居然是responses自己猜出来...

    开发wap注意事项---wml中文乱码

    wml中文乱码及wml按钮设置。 在servlet里面的doget和dopost方法设置 request.setCharacterEncoding("UTF-8"); response.setContentType(Const.CONTENT_TYPE);//Const.CONTENT_TYPE为:text/vnd.wap.wml;charset=...

    通过过滤器(Filter)解决JSP的Post和Request中文乱码问题

    jsp代码: import javax.servlet.*;... public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { try { HttpServletRequest httpRequest = (HttpServle

    ajax中文乱码问题解决方案

    ajax中文乱码问题在中文中经常会出现这种问题,其实只要稍加注意就不会出现ajax中文乱码这回事情了,注意前后台编码一致.你用的是中文.而ajax传输数据的时候用的是utf-8 ,还有对ajax get方法时最好escape 或urlcode,...

    从J2SE到J2EE知识点介绍

    5. JSP页面通过URL传递中文参数的乱码问题 139 四、 Struts2 140 (一) 基于struts2的web应用的开发步骤 140 1. MVC设计模式() 140 2. 基于struts的web应用的开发步骤 141 3. 如何写自定义action,实体,以及业务类...

    android和服务器的URLEncodedUtils乱码编码问题的解决方案

    在android开发中我们常常遇到与到乱码问题,遇到乱码问题首先我们要先检查两端编码格式是否一致! 一般我们提交数据用get 和post方法,这两种方法在上传中有con.setRequestProperty(Charset, UTF-8); 和...

    fiddler使用方法之Fiddler显示IP,Fiddler中文乱码解决方法以及fiddler模拟发送get/post请求

    今天为大家介绍fiddler的3种使用技巧,(1)Fiddler抓包显示域名IP(2)解决Fiddler抓包时中文乱码问题(3)利用fiddler模拟发送get/post请求的方法

    如何用Response.Redirect方法传递汉字

    使用Response.Redirect方法传递汉字,有时会发现所传递的值和接收到的内容不符,接受的值丢失了几个字或者变成了一堆乱码.那么如何才能保证所传递的汉字被正确接收呢? 页面A传递值的代码如下: string Message=Server...

Global site tag (gtag.js) - Google Analytics