表单默认的提交方式是get。提交请求时如果提交的参数含有英文字符,能正确显示;如果提交中文时就会出现乱码。
产生原因:Tomcat下面总是会把GET/POST过来的reqest.parameters以ISO8859-1来解码,但中文系统下的浏览器的缺省方式是以UTF-8提交发送请求的,而UTF-8、GB2312和iso8859-1的编码方式不一样,故导致取到的表单数据为不能识别的乱码。
解决办法:通过request.setCharacterEncoding("****")对请求进行统一编码,就实现了中文的正常显示。比如,要求页面统一用GB2312来处理中文代码,就在处理页面的代码中插入:
解决办法:通过request.setCharacterEncoding("****")对请求进行统一编码,就实现了中文的正常显示。比如,要求页面统一用GB2312来处理中文代码,就在处理页面的代码中插入:
<%
request.setCharacterEncoding("GB2312");
%>
request.setCharacterEncoding("GB2312");
%>
就行了。不信试试?
有些时候,是无法指定字符编码的,比如说,用get()方法提交的参数中有汉字,这时若直接用
String vName = request.getParameter("vName")
的汉字就是乱码,因为在传的时候,是以ISO8859-1传输的,而显示时,则是以UTF-8或GB2312,这时,就要对得到的字串进行转换。所用的方法有两个,一个是用指定的字符集把字串转成字节,方法是:
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>
相关推荐
在 Web 开发中,中文乱码问题是一个常见的问题,尤其是在FORM表单传递参数时。这个问题的根本原因是对中文的编码与解码方式不一致。我们可以理解为对中文的加密与解密的密钥不一致。例如,用UTF-8对中文编码而用ISO-...
本文将深入探讨WebOffice表单中参数乱码的原因及解决办法,帮助读者有效应对这一挑战。 ### WebOffice表单中参数乱码的成因 参数乱码问题主要源于字符编码不一致。当Web服务器与客户端(如浏览器)之间的数据传输...
在C++中,进行HTTP文件上传到Web服务器时,可能会遇到中文参数乱码的问题。这是因为HTTP协议本身并不处理字符编码,而是依赖于上层的应用层协议(如HTTP头或者POST数据)来处理字符集。当涉及到非ASCII字符,如中文...
### extjs前后台交互参数出现中文乱码问题的解决方法 #### 问题背景与原因分析 在使用MyEclipse开发工具进行Web应用开发时,尤其是采用ExtJS框架结合Ajax技术进行前后端数据交互的过程中,可能会遇到一个常见的...
以上代码涉及到对请求参数乱码的处理。具体来说: - 对于`POST`请求,通过`request.setCharacterEncoding("GBK")`来指定请求体的字符编码为GBK。 - 对于非`POST`请求(通常是`GET`),定义了一个名为`string...
get post提交表单中文乱码过滤器(java)
### jspservlet取参数乱码问题分析 #### 一、问题本质及原因分析 在Java Web开发中,尤其是在处理中文参数时,经常会遇到一个常见问题——**jspservlet取参数乱码**。这一现象通常发生在当用户从客户端提交包含...
中文乱码通常出现在两个场景:1) 服务器接收到的请求参数出现乱码;2) 客户端接收到的响应内容显示为乱码。这主要是由于字符编码不一致导致的。HTTP协议默认使用ASCII编码,而中文字符通常需要UTF-8或GBK等编码来...
针对GET请求中文参数乱码的问题,这里提供一种快速解决方法:使用JavaScript的`encodeURI()`函数进行两次编码。`encodeURI()`函数是JavaScript提供的用于编码URI的函数,它不会对已经编码的字符以及特殊字符如'&'、'...
4. **GET方式表单传递和URI方式传递参数乱码**: 对于GET请求或URL中的中文参数乱码,需要修改Tomcat服务器的配置。在`server.xml`文件中的`<Connector>`标签中添加`URIEncoding="GBK"`属性,比如: ``` ...
4. **表单提交方式引起的编码问题**:不同的表单提交方式(GET与POST)对于编码的处理方式不同,如果不加以处理,也会导致乱码问题。 #### 三、解决中文乱码的具体方法 ##### 1. 数据库配置 - **MySQL数据库配置*...
对于Web应用,当用户通过表单提交数据时,可以通过设置表单的`method`属性为`POST`来避免GET请求导致的乱码问题: ```html ``` 同时,在Servlet或Filter中设置请求编码为UTF-8: ```java request.setCharacter...
### Ajax开发过程中表单提交数据出现乱码及解决办法 在进行Ajax开发的过程中,经常会遇到一个令人头疼的问题:表单提交的数据出现乱码。这个问题主要出现在客户端与服务器端编码不一致的情况下,导致数据传输过程中...
在参数值、参数名称以及报表名称中,如果包含中文字符或特殊字符,直接传递可能会导致乱码或错误问题。因此,需要对这些中文或特殊字符进行编码转换。 为了解决这个问题,FineReport提供了一个内部封装的编码方法,...
解决表单post,get到springMVC后台乱码的问题需要从多个方面进行调整,包括前台表单编码、Spring MVC 配置和后台接收参数。在后台接收参数时,需要使用 `request.getParameterMap()` 或 `request.getParameter()` ...
JAVA 中文乱码解决问题 JAVA 中文乱码问题是开发过程中常见的问题之一,解决这个问题需要了解乱码产生的原因,然后对症下药。下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。 1. 以 POST 方法提交的...
这将将请求参数的字符编码从 iso-8859-1 转换为 UTF-8,从而解决中文乱码问题。 解决中文乱码问题的关键是确保字符编码的一致性。无论是在 JSP 文件、Servlet、Struts 2 还是在表单处理中,我们都需要设置正确的...
在提交页面表单元素给对应的 JSP页面或者Servlet时,如果接收方出现表单数据中文值乱码,可能是由于接收参数的编码方式不正确所致。解决方案是,在接收 POST 提交的参数之前,使用 request.setCharacterEncoding(...
超链接传递中文参数乱码 除了表单提交外,通过超链接传递中文参数也是常见的应用场景。同样地,如果超链接中的中文参数未经正确的编码,在服务器端接收时也会遭遇乱码问题。这是因为URL默认使用的也是ISO-8859-1...
2. 表单使用Post方式提交后接收到的乱码问题 在使用Post方式提交表单时,如果没有指定提交的编码格式,tomcat将使用iso8859-1编码格式进行提交,这将导致乱码。 解决方法有三种: A. 在接受参数时进行编码转换,...