`
zengshaotao
  • 浏览: 787414 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

表单参数乱码

 
阅读更多

表单默认的提交方式是get。提交请求时如果提交的参数含有英文字符,能正确显示;如果提交中文时就会出现乱码。

  产生原因:Tomcat下面总是会把GET/POST过来的reqest.parameters以ISO8859-1来解码,但中文系统下的浏览器的缺省方式是以UTF-8提交发送请求的,而UTF-8、GB2312和iso8859-1的编码方式不一样,故导致取到的表单数据为不能识别的乱码。
  解决办法:通过request.setCharacterEncoding("****")对请求进行统一编码,就实现了中文的正常显示。比如,要求页面统一用GB2312来处理中文代码,就在处理页面的代码中插入:
<%
request.setCharacterEncoding("GB2312");
%>
就行了。不信试试?
 

有些时候,是无法指定字符编码的,比如说,用get()方法提交的参数中有汉字,这时若直接用

                            String vName = request.getParameter("vName")

的汉字就是乱码,因为在传的时候,是以ISO8859-1传输的,而显示时,则是以UTF-8GB2312,这时,就要对得到的字串进行转换。所用的方法有两个,一个是用指定的字符集把字串转成字节,方法是:

   publicbyte[] getBytes(String charsetName)throws UnsupportedEncodingException

 

另一个就是String类的一个构造方法,即把一个字节序列按指定的字符集生成字串:

   public String(byte bytes[], String charsetName)

 

综合到一起,就成了

byte[] arrayStr = request.getParameter("vName")

.getBytes("iso-8859-1");

String vName = new String(arrayStr, "UTF-8");

 

这个时候的vName,就是正常的汉字了,不信你试试

 
 
 
顺便说一下,也可在servlet里,添加一Filter将数据重新转回UTF-8编码。
 
Filter代码如下:
package pro.rk.web.utils.filter;

import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class TomcatParameterConvertFilter implements javax.servlet.Filter
{
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException
    {
        HttpServletRequest httpRequest = (HttpServletRequest)request;
        Map<String, String> paras = new HashMap<String, String>();
        Enumeration names = httpRequest.getParameterNames();
        while (names.hasMoreElements())
        {
            String key = (String)names.nextElement();
            paras.put(key, new String(request.getParameter(key).getBytes("iso8859-1"), "utf-8"));
        }
        chain.doFilter(new ConvertedRequest(httpRequest, paras), response);
    }

    public void init(FilterConfig config) throws ServletException
    {
    }

    public void destroy()
    {
    }

    private class ConvertedRequest extends HttpServletRequestWrapper
    {
        private Map<String, String> paras;

        public ConvertedRequest(HttpServletRequest request, Map<String, String> paras)
        {
            super(request);
            this.paras = paras;
        }

        @Override
        public String getParameter(String key)
        {
            return this.paras.get(key);
        }
    }
}



部署描述符:
    <filter>
        <filter-name>TomcatParameterConvertFilter</filter-name>
        <filter-class>pro.rk.web.utils.filter.TomcatParameterConvertFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>TomcatParameterConvertFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
分享到:
评论

相关推荐

    FORM表单中文乱码问题分析与解决

    在 Web 开发中,中文乱码问题是一个常见的问题,尤其是在FORM表单传递参数时。这个问题的根本原因是对中文的编码与解码方式不一致。我们可以理解为对中文的加密与解密的密钥不一致。例如,用UTF-8对中文编码而用ISO-...

    WebOffice表单中参数乱码解决办法

    本文将深入探讨WebOffice表单中参数乱码的原因及解决办法,帮助读者有效应对这一挑战。 ### WebOffice表单中参数乱码的成因 参数乱码问题主要源于字符编码不一致。当Web服务器与客户端(如浏览器)之间的数据传输...

    C++Http上传文件到web服务器,解决中文参数乱码

    在C++中,进行HTTP文件上传到Web服务器时,可能会遇到中文参数乱码的问题。这是因为HTTP协议本身并不处理字符编码,而是依赖于上层的应用层协议(如HTTP头或者POST数据)来处理字符集。当涉及到非ASCII字符,如中文...

    extjs 前后台交互参数出现中文乱码问题的解决方法

    ### extjs前后台交互参数出现中文乱码问题的解决方法 #### 问题背景与原因分析 在使用MyEclipse开发工具进行Web应用开发时,尤其是采用ExtJS框架结合Ajax技术进行前后端数据交互的过程中,可能会遇到一个常见的...

    传值 乱码 处理 jsp 处理表单时

    以上代码涉及到对请求参数乱码的处理。具体来说: - 对于`POST`请求,通过`request.setCharacterEncoding("GBK")`来指定请求体的字符编码为GBK。 - 对于非`POST`请求(通常是`GET`),定义了一个名为`string...

    get post提交表单中文乱码过滤器(java)

    get post提交表单中文乱码过滤器(java)

    jspservlet取参数乱码问题分析

    ### jspservlet取参数乱码问题分析 #### 一、问题本质及原因分析 在Java Web开发中,尤其是在处理中文参数时,经常会遇到一个常见问题——**jspservlet取参数乱码**。这一现象通常发生在当用户从客户端提交包含...

    解决web中文乱码

    中文乱码通常出现在两个场景:1) 服务器接收到的请求参数出现乱码;2) 客户端接收到的响应内容显示为乱码。这主要是由于字符编码不一致导致的。HTTP协议默认使用ASCII编码,而中文字符通常需要UTF-8或GBK等编码来...

    页面get请求 中文参数方法乱码问题的快速解决方法

    针对GET请求中文参数乱码的问题,这里提供一种快速解决方法:使用JavaScript的`encodeURI()`函数进行两次编码。`encodeURI()`函数是JavaScript提供的用于编码URI的函数,它不会对已经编码的字符以及特殊字符如'&'、'...

    JSP页面中文乱码几个解决办法

    4. **GET方式表单传递和URI方式传递参数乱码**: 对于GET请求或URL中的中文参数乱码,需要修改Tomcat服务器的配置。在`server.xml`文件中的`&lt;Connector&gt;`标签中添加`URIEncoding="GBK"`属性,比如: ``` ...

    Servlet及jsp解决中文乱码问题

    4. **表单提交方式引起的编码问题**:不同的表单提交方式(GET与POST)对于编码的处理方式不同,如果不加以处理,也会导致乱码问题。 #### 三、解决中文乱码的具体方法 ##### 1. 数据库配置 - **MySQL数据库配置*...

    乱码解决_MYSQL.txt

    对于Web应用,当用户通过表单提交数据时,可以通过设置表单的`method`属性为`POST`来避免GET请求导致的乱码问题: ```html ``` 同时,在Servlet或Filter中设置请求编码为UTF-8: ```java request.setCharacter...

    Ajax开发过程表单提交数据出现乱码和解决办法

    ### Ajax开发过程中表单提交数据出现乱码及解决办法 在进行Ajax开发的过程中,经常会遇到一个令人头疼的问题:表单提交的数据出现乱码。这个问题主要出现在客户端与服务器端编码不一致的情况下,导致数据传输过程中...

    Web报表FineReport页面如何传递中文参数

    在参数值、参数名称以及报表名称中,如果包含中文字符或特殊字符,直接传递可能会导致乱码或错误问题。因此,需要对这些中文或特殊字符进行编码转换。 为了解决这个问题,FineReport提供了一个内部封装的编码方法,...

    解决表单post,get到springMVC后台乱码的问题

    解决表单post,get到springMVC后台乱码的问题需要从多个方面进行调整,包括前台表单编码、Spring MVC 配置和后台接收参数。在后台接收参数时,需要使用 `request.getParameterMap()` 或 `request.getParameter()` ...

    java中文乱码解决问题

    JAVA 中文乱码解决问题 JAVA 中文乱码问题是开发过程中常见的问题之一,解决这个问题需要了解乱码产生的原因,然后对症下药。下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。 1. 以 POST 方法提交的...

    中文乱码问题

    这将将请求参数的字符编码从 iso-8859-1 转换为 UTF-8,从而解决中文乱码问题。 解决中文乱码问题的关键是确保字符编码的一致性。无论是在 JSP 文件、Servlet、Struts 2 还是在表单处理中,我们都需要设置正确的...

    jsp页面传值中文乱码问题处理.docx

    在提交页面表单元素给对应的 JSP页面或者Servlet时,如果接收方出现表单数据中文值乱码,可能是由于接收参数的编码方式不正确所致。解决方案是,在接收 POST 提交的参数之前,使用 request.setCharacterEncoding(...

    Struts2.0解决中文乱码

    超链接传递中文参数乱码 除了表单提交外,通过超链接传递中文参数也是常见的应用场景。同样地,如果超链接中的中文参数未经正确的编码,在服务器端接收时也会遭遇乱码问题。这是因为URL默认使用的也是ISO-8859-1...

    jsp中文乱码问题jsp中文乱码问题详解

    2. 表单使用Post方式提交后接收到的乱码问题 在使用Post方式提交表单时,如果没有指定提交的编码格式,tomcat将使用iso8859-1编码格式进行提交,这将导致乱码。 解决方法有三种: A. 在接受参数时进行编码转换,...

Global site tag (gtag.js) - Google Analytics