`

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进行编码。
分享到:
评论

相关推荐

    解决中文乱码问题

    "解决中文乱码问题" 在Java编程中,中文乱码是一个常见的问题。为了解决这个问题,我们需要从多个方面入手。首先,我们需要将Eclipse的编码方式设置为UTF-8,以便正确地显示中文字符。其次,我们需要在浏览器中将...

    JSP利用过滤器解决request中文乱码问题.docx

    JSP中requestgetParameter中文乱码问题是经常遇到的问题,解决这个问题有多种方法,但利用过滤器解决request中文乱码问题是其中最有效的一种方法。本文将详细介绍如何使用过滤器解决JSP中request中文乱码问题。 ...

    response中文乱码解决的代码

    在IT行业中,尤其是在Web开发领域,处理中文乱码问题是一个常见的挑战。本篇文章将深入探讨如何在使用Servlet进行文件下载时解决中文文件名的乱码问题。Servlet是Java Web开发中的一个关键组件,用于接收HTTP请求并...

    JSP用过滤器解决request getParameter中文乱码问题.docx

    在开发Java Web应用程序时,经常会遇到请求参数中的中文字符出现乱码的问题,尤其是在使用JSP时。这个问题通常发生在客户端通过HTTP GET或POST方法传递包含中文字符的参数到服务器,然后服务器端通过`...

    Tomcat和weblogic中文乱码问题解决方案

    例如,在 Tomcat 或 WebLogic 服务器中,request 和 response 的编码方式可能不同,这将导致中文乱码问题的出现。 解决方案 解决中文乱码问题最好的方法是增加过滤器。关键代码只有三行: ```java response.set...

    MyEclipse中文乱码问题简单解决方案,不需任何编码转化

    MyEclipse中文乱码问题解决方案 在本文中,我们将讨论 MyEclipse 中的中文乱码问题,并提供一个简单的解决方案,不需要任何编码转换。这个解决方案可以直接应用于数据库插入、页面传递或 Servlet 中,解决了中文...

    中文乱码问题

    中文乱码问题解决方案 中文乱码问题是 web 开发中经常遇到的问题,特别是在使用 JSP、Servlet、Struts 2 等技术时。乱码问题的出现主要是由于字符编码不一致所致。以下是解决中文乱码问题的知识点: JSP 文件的...

    拦截器解决中文乱码问题

    总的来说,理解字符编码原理,结合拦截器的灵活运用,可以有效地防止和解决Web应用中的中文乱码问题,提高用户体验。同时,良好的编码习惯和规范,以及对各种编码问题的敏感度,也是开发过程中不可或缺的一部分。

    解决tomcat下中文乱码问题

    解决 Tomcat 下中文乱码问题 在本文中,我们将讨论如何解决 Tomcat 下中文乱码问题。该问题是由于 Tomcat 默认的字符编码设置不正确引起的。我们将通过设置 Connector 元素的 URIEncoding 属性和在过滤器中设置字符...

    java+jsp+mysql开发 web项目处理中文乱码问题

    处理 Java+jsp+mysql 开发 web 项目中文乱码问题 在 Java+jsp+mysql 开发 web 项目中,中文乱码问题是一个常见的问题,影响着项目的正常运行。下面我们将从四个方面来解决中文乱码问题: 一、Jsp 输出中文的乱码...

    解决servlet中文乱码问题1

    解决servlet中文乱码问题1的描述是指,如何通过正确的配置和编码设置来解决servlet中文乱码问题。这个问题的解决方案包括了在页面输入中文时,请求页面后不出现乱码的方法,以及获取中文属性不出现乱码的方法。 ...

    Request&Response-授课

    在这个示例中,我们使用了HttpServletResponse对象的setCharacterEncoding和setContentType方法来设置响应对象的字符编码和内容类型,从而解决了中文乱码问题。 响应对象是JavaWeb开发中非常重要的一部分,它们...

    2种解决JSP中request乱码问题.docx

    使用这两种方法可以解决 JSP 中 request 乱码问题,确保用户输入的中文和汉字等双字节文字正确显示。 此外,在保存 java 和 jsp 文件时,也应该使用 UTF-8 编码,以避免乱码问题。 在整个应用程序中使用 UTF-8 ...

    关于处理中文乱码问题 Filter 代码

    中文乱码问题通常发生在数据的编码和解码过程中。当客户端(如浏览器)和服务器之间传递含有中文字符的数据时,如果编码格式不一致,就会出现乱码。例如,服务器端默认使用UTF-8编码,而客户端发送的是GBK编码的数据...

    解决web中文乱码

    在Web开发过程中,中文乱码是一个常见的问题,尤其是在处理HTTP请求和响应时。本文将深入探讨如何使用Java的Filter机制来解决这个问题,提供一个简单可靠的解决方案,并详细解释配置过程。 一、理解Web中文乱码问题...

    利用过滤器解决JavaWeb(JSP)的乱码问题

    此外,对于"中文乱码问题.txt"这样的文本文件,如果在读取或写入时没有正确指定编码,也可能导致乱码。Java中,我们可以使用`BufferedReader`和`BufferedWriter`的构造函数,明确指定字符集来避免这种情况。 总之,...

    JSP内置对象:Request和Response的简单介绍及使用

    在Java Server Pages (JSP) 中,Request和Response是两个非常重要的内置对象,它们分别代表了HTTP请求和HTTP响应。这两个对象是基于Servlet API的HttpServletRequest和HttpServletResponse接口的实例,为开发者提供...

    Web_3_Request和Response1

    【Web_3_Request和Response1】讲解 在Web开发中,Request和Response是核心概念,它们代表了客户端与服务器之间的通信。本章主要探讨的是如何使用ServletResponse,特别是HttpServletResponse对象来构建响应,以及...

    springMVC解决中文乱码

    下面我们将详细介绍 SpringMVC 中解决中文乱码问题的思路和方法。 配置文件中的字符编码 在 SpringMVC 中,我们可以在 web.xml 文件中配置字符编码。例如,我们可以在 web.xml 文件中添加以下配置: ```xml ...

    使用过滤器解决中文乱码问题

    解决中文乱码问题需要从多个层面进行检查和处理,过滤器是其中一种有效的方法。通过在Web应用的入口处统一设置编码,可以避免因编码不一致导致的乱码问题。然而,要完全消除乱码,还需要对整个系统的编码环境进行...

Global site tag (gtag.js) - Google Analytics