A标签中传递的中文参数到Servlet 后台request.getParameter()接收时出现中文乱码

package util;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class MyHttpServletRequest extends HttpServletRequestWrapper {

protected Log log = LogFactory.getLog(getClass());
private static final String ENCODED = "UTF-8",DECODE="ISO8859-1";

public MyHttpServletRequest(HttpServletRequest request) {
super(request);
}

@Override
public String getQueryString() {
String queryString = super.getQueryString();
if(queryString != null){
try {
return new String(queryString.getBytes(DECODE),ENCODED);
} catch (UnsupportedEncodingException e) {
log.info(e.getMessage(),e);
}
}
return queryString;
}

@Override
public String getParameter(String name) {
String value = super.getParameter(name);
if (value != null) {
try {
return new String(value.getBytes(DECODE), ENCODED);
} catch (UnsupportedEncodingException e) {
log.info(e.getMessage(),e);
}
}
return value;
}

@SuppressWarnings("unchecked")
@Override
public Map getParameterMap() {
Map<String, String[]> values = super.getParameterMap();
Map<String, String[]> valuesMap = new HashMap<String, String[]>();
Set<String> names = values.keySet();
for (Iterator<String> iter = names.iterator(); iter.hasNext();) {
String name= iter.next();
String[] v = values.get(name);
if(v != null) {
String[] valuesCopy = new String[v.length];
for(int i = 0; i < v.length; i++) {
try {
valuesCopy[i] = new String(v[i].getBytes(DECODE), ENCODED);
} catch (UnsupportedEncodingException e) {
log.info(e.getMessage(),e);
}
}
valuesMap.put(name, valuesCopy);// 向新Map放入转码过的值
}
}
return valuesMap;// 返回是副本
}

@Override
public String[] getParameterValues(String name) {
String[] values = super.getParameterValues(name);
if(values != null) {
String[] valuesCopy = new String[values.length];//原数组是只读的,不能修改
for(int i = 0; i < values.length; i++) {
try {
valuesCopy[i] = new String(values[i].getBytes(DECODE), ENCODED);
} catch (UnsupportedEncodingException e) {
log.info(e.getMessage(),e);
}
}
return valuesCopy;
}
return values;
}
}

后台调用

request = new MyHttpServletRequest(request);

来自:http://bbs.csdn.net/topics/320081498  回答的二楼作者

时间: 2024-08-07 10:14:15

A标签中传递的中文参数到Servlet 后台request.getParameter()接收时出现中文乱码的相关文章

分享url带中文参数,打开html操作完毕跳转jsp页面中文乱码解决

1.在app端分享参数组合时不对传递的url进行任何编码. 2.打开html页面时使用 escape函数对有中文的参数进行编码 escape(GetQueryString("parameter")); 3.操作完毕跳转.jsp页面时,需要使用jsp解码,不能使用javascript函数进行解码否则 乱码 <%@page import="java.net.URLDecoder" %> androidLoadStoreUrlResterAlert=URLDe

过滤器中处理multipart/form-data头部的post请求request.getParameter(&quot;)获取不到参数问题

如果不是文件类型请求,我们使用request.getParameter("");方法是可以获取到参数内容的,如果是文件类型的请求即请求的头部信息为"multipart/form-data",时,需要如下处理: HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; String contentTy

C# 中传递多个参数给多线程

1.方式一:使用ParameterizedThreadStart委托 如果使用了ParameterizedThreadStart委托,线程的入口必须有一个object类型的参数,且返回类型为void.   using System; using System.Threading; namespace ThreadWithParameters { class Program { static void Main(string[] args) { string hello = "hello worl

angularjs 中传递非URL参数方法

在目标页面规定接受的参数:$stateProvider.state('page2', {params: {'DATA': null}}) 传参:$state.go('page2', {DATA: 'aaa'}); 目标页面接受参数:控制器注入$stateParams之后可以通过$stateParams.DATA来获取‘aaa’

关于JAVA中URL传递中文参数的问题

今天在调用一个接口时,需要传递一个中文参数,结果获取不到数据,原因就在于中文传参的编码问题. 问题来源:URL url= new URL("http://XXX?OrganName=司法厅"); 现解决办法如下: 1.对要进行URL传递的中文字符进行编码: String message = Java.NET.URLEncoder.encode("司法厅","utf-8"); 2.在取URL传递中文的页面对字符进行解码: String msg =

javascript通过url向jsp页面传递中文参数乱码解决方法

解决方法:在传递参数前将中文参数进行两次编码,jsp页面获取参数后对中文参数进行一次解码,中文参数就不会变为乱码了! 参考例子: <%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ page import="java.net.*" %><%String str0=&

用get方式提交请求的url带有中文参数

又碰到JSP页面中文乱码问题,经过一次encodeURI处理后仍旧是乱码,后来经过两次encodeURI后正常显示中文 以前也碰到过同样的问题,没深究,这次网上搜集了一些资料,记录下来留做备份 _____________________________________________________ 前端JS: var name="中文"; var url = "demo.jsp?name=" +name; url=encodeURI(url); url=encod

js 处理url中文参数 java端接收处理

正常情况下当http请求中带有中文参数时,浏览器会自动对中文进行一次编码(按照当前页面的pageEncoding),java端容器会对接收到的参数自动进行一次转码,则request.getParameter取到的则为正常的数据 若浏览器不自动对中文编码,则java端再自动转码就会出现乱码情况,此时可以在js中用encodeURI 对中文进行编码,后台不用强制解码,则可正常取到数据,因为手动编码后不存在中文数据,对于默认会进行编码的浏览器来讲也不会产生影响 一般情况下, 发送 encodeURIC

中文参数传到服务端乱码问题

不论是用servlet还是spring框架,在浏览器端地址栏输入中文参数传到服务端的时候,都是以乱码的形式出现,即使浏览器和服务端 使用了UTF-8编码,还是乱码,这个时候需要去看下tomcat中的编码配置 然后在使用eclipse的时候重新配置server选项 检查这个文件的URIEncoding是不是utf-8