`

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

相关推荐

    Request.QueryString 乱码问题

    ### Request.QueryString 乱码问题解析及解决方案 在Web开发中,经常会遇到通过URL...通过以上分析与解决策略,我们可以有效地解决`Request.QueryString`中出现的中文乱码问题,提高Web应用程序的稳定性和用户体验。

    解决中文乱码问题

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

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

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

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

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

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

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

    中文乱码问题

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

    servlet中文乱码问题

    通过修改Tomcat配置文件中的`URIEncoding`属性以及在Servlet中通过`response.setContentType()`和`request.setCharacterEncoding()`方法来设置字符编码,可以有效解决中文乱码问题。此外,还可以通过字符集转换的...

    Servlet 中文乱码问题

    在Java的Servlet开发中,中文乱码问题是一个常见的困扰,主要涉及到请求(request)和响应(response)两个方面。本文将详细解析这两个方面的乱码问题及其解决方案。 首先,我们需要了解一些基础知识。GBK编码是一种...

    response中文乱码解决的代码

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

    response与request中文乱码问题及解决方式

    前言:在Javaweb开发过程中可能会遇到乱码的问题,本文整理了几个常用的乱码解决方式一.编码基础知识1.四种常见编码ISO-8859-1单字节编码,兼容ASCII码,相当于ASCII码的扩展,无法表示中文字符,系统默认编码。GBK...

    ASP.NET中Request.Form中文乱码的解决方法

    描述中提到,开发人员最初认为只有`Request.QueryString`在处理URL查询字符串时可能出现中文乱码,而忽略了`Request.Form`同样可能遇到类似问题。事实上,当表单以POST方式提交时,表单数据通过HTTP请求体发送,这...

    java解决解决get中文乱码问题

    ### Java解决GET请求中文乱码问题详解 在Java Web开发中,经常遇到的一个问题是处理GET请求中的中文参数时出现乱码。这个问题主要是因为浏览器发送GET请求时,参数默认使用ISO-8859-1编码格式,而服务器端通常采用...

    拦截器解决中文乱码问题

    总的来说,理解字符编码原理,结合拦截器的灵活运用,可以有效地防止和解决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 ...

    如何解决Tomcat下中文乱码问题?

    在IT行业中,尤其是在Java Web开发领域,Tomcat服务器在处理中文字符时经常遇到乱码问题。这主要涉及两个方面:JSP页面显示中文乱码和表单提交乱码。为了解决这些问题,我们需要理解字符编码的基本原理,并采取相应...

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

    ### 使用过滤器解决中文乱码问题 在Web开发过程中,经常遇到的一个问题是中文或其它非ASCII字符的乱码问题。这种现象通常出现在浏览器接收的数据与实际编码格式不匹配时。解决此类问题的一种常见方法是使用过滤器...

Global site tag (gtag.js) - Google Analytics