`
浴盆儿
  • 浏览: 80655 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

URL请求传递中文参数乱码

阅读更多

有的时候我们发送URL请求会带有中文参数,例如url.do?name=浴盆,这样直接发送会产生中文乱码的问题。

 

下面据个例子

 

请求http://localhost:8080/Url/url.do?name=浴盆

 

action 定义如下

 

package com.url.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class UrlAction extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		String name = request.getParameter("name");
		System.out.println(name);
		return null;
	}
}

 

后台打印

14:02:05,317 INFO  [STDOUT] ???è

 

那么我们在发送请求前就要对中文的参数进行处理,使其转化为特定的编码格式放入URL的参数中进行传递。
java提供了处理URL编码的类java.net.URLDecoder和java.net.URLEncoder;
在发送请求以前,我们利用java.net.URLEncoder来对中文参数编码

 

 

System.out.println(URLEncoder.encode("浴盆", "UTF-8"));

 

得到 %E6%B5%B4%E7%9B%86

 

我们再次请求http://localhost:8080/Url/url.do?name=%E6%B5%B4%E7%9B%86

 

后台打印
14:14:51,970 INFO  [STDOUT] ??????

 

我们看到还是乱码,所以在action中还要对中文的参数进行处理

 

更改action

 

package com.url.action;

import java.net.URLDecoder;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class UrlAction extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		String name = request.getParameter("name");
		name = URLDecoder.decode(name, "UTF-8");
		System.out.println(name);
		return null;
	}
}

 

 

后台打印
14:14:51,970 INFO  [STDOUT] ??????

 

我们看到还是乱码

这是为什么呢,原来请求的信息放在request中,我们还要对request设置编码格式,才能得到正确的中文参数信息

 

再次更改action

 

package com.url.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class UrlAction extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		request.setCharacterEncoding("UTF-8");
		String name = request.getParameter("name");
		System.out.println(name);
		return null;
	}
}

 

后台打印
14:21:47,728 INFO  [STDOUT] 浴盆


我们看到已经得到了正确的参数值并不需要调用name = URLDecoder.decode(name, "UTF-8");

 

重要的是request.setCharacterEncoding("UTF-8");

 

6
2
分享到:
评论
5 楼 advantech 2009-07-10  
request.setCharacterEncoding("UTF-8")这句话只对post方式的数据传递有效,get方式无效。
4 楼 浴盆儿 2009-03-20  
yuexiaowen 写道

看一下,你的tomcat下server.xml中的配置,设置编码格式为gbk的就可以,前提是你的jsp页面的编码格式是gbk,这样解决就ok。


恩,我试了,中文可以,但是我改成UTF-8就不行了,我要支持多国语言啊,要用UTF-8才可以呢,再说了,我也不一定用TOMCAT,我现在用的就是JBOSS啊,不过还是谢谢你的留言

3 楼 浴盆儿 2009-03-20  
foreverandever 写道


这样的方法还不够彻底,要在用到的所有的Action中都要写上这些代码。



你说的对,不能每个action都写,我这里只是测试一下,不过还是谢谢你的留言


2 楼 yuexiaowen 2009-03-20  
看一下,你的tomcat下server.xml中的配置,设置编码格式为gbk的就可以,前提是你的jsp页面的编码格式是gbk,这样解决就ok。
1 楼 foreverandever 2009-03-20  
这样的方法还不够彻底,要在用到的所有的Action中都要写上这些代码。

request.setCharacterEncoding("UTF-8")


个人觉得配置Filter会比较轻松一些。

相关推荐

    GET方法URL中传递中文参数乱码的解决方法

    然而,当我们在GET请求的URL中直接传递包含中文字符的参数时,可能会遇到乱码问题。这是因为不同系统、浏览器和服务器对字符编码的支持不一致,导致在传输过程中中文字符无法正确解析。以下是对这个问题的深入探讨和...

    ajax传递中文参数乱码解决办法

    ### AJAX传递中文参数乱码解决办法 在Web开发过程中,数据传输是不可或缺的一部分,而AJAX作为一种无需重新加载整个页面的情况下就能与服务器交换数据的技术,被广泛应用于动态数据交互场景中。然而,在处理中文等...

    asp.net中URL参数传值中文乱码的三种解决办法

    在ASP.NET开发过程中,我们时常会遇到URL参数传递中文字符时出现乱码的问题。这个问题主要源于字符编码不一致导致的,下面将详细讲解三种解决这个问题的方法。 ### 方法一:设置Web.config配置 在ASP.NET应用的`...

    jquery获取URL中参数解决中文乱码问题的两种方法

    当我们需要在两个页面间通过URL传递参数时,经常会遇到中文乱码问题。这个问题主要是因为URL中的参数可能没有经过正确的编码和解码处理。为了解决这个问题,我们可以采取一些方法,特别是当使用jQuery来获取URL参数...

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

    微软提供的CHttpConnect类在处理这种场景时可能存在不足,因此我们需要理解如何正确地编码和传递中文参数。 首先,让我们了解HTTP请求的基本结构。一个POST请求通常包括一个请求行、请求头和请求体。请求头可能包含...

    Java Http请求传json数据乱码问题的解决

    在Java代码中,当通过HTTP请求传输包含中文的JSON数据时,前端通常会使用JavaScript的`JSON.stringify`函数将JSON对象转换为字符串,并通过GET或POST请求传递给后端。在JavaScript中,字符串默认使用UTF-8编码,因此...

    动态加载iframe时get请求传递中文参数乱码解决方法

    然而,当我们在`iframe`的`src`属性中通过`GET`请求传递包含中文参数时,可能会遇到乱码问题。这是因为浏览器在处理URL时,默认的编码方式可能不兼容中文字符,导致中文字符无法正确解析。 首先,我们需要理解这个...

    Jsp页面在URL中传递参数会出现乱码问题解决

    在Web开发中,尤其是使用Java JSP技术时,我们可能会遇到URL中传递参数出现乱码的问题。这是因为不同的字符集编码方式可能导致字符在传输过程中无法正确解析。本文将详细介绍两种解决JSP页面URL参数乱码的方法,虽然...

    jsp使用URL编码传递中文参数问题.doc

    在JSP开发中,处理URL编码传递中文参数是常见的需求,尤其是在构建动态网页时。这个问题主要涉及到字符编码的转换,因为不同的编码标准可能导致乱码。以下是对这个主题的详细解释: 1. **URL编码**:URL(统一资源...

    URL传参数时中文乱码解决方法

    在IT领域,尤其是在Web开发中,处理URL传递参数时遇到中文乱码是一个常见的问题,尤其当数据需要跨系统或在不同编码环境下传输时更为显著。本文将深入探讨URL传参数时中文乱码的原因、影响以及如何有效解决这一问题...

    servlet url传递中文参数

    当我们需要通过URL传递参数时,经常会遇到中文参数的问题。这是因为URL本身是基于ASCII编码的,不支持直接传输非ASCII字符,如中文。本篇将详细介绍如何在Servlet中处理URL传递中文参数的情况。 首先,了解URL编码...

    asp.net页面通过URL参数传值中文乱码问题解决办法

    在Asp.Net开发中,遇到页面通过URL参数传递中文字符时出现乱码是一个常见的问题。这个问题通常是由于字符编码不一致导致的。以下是三种常见的解决方法: 1. **配置Web.config文件**: 在Web.config文件的`...

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

    // 发送POST请求,并将编码后的中文参数拼接到URL中 conn.open("POST", "/SanXiaMS/servlet/AccountBookServlet1?CustomFormName=" + CustomFormName1, false); conn.send(null); // 获取服务器响应结果 var ...

    URL传中文参数导致乱码的解决方案之encodeURI

    然而,当URL需要传递包含中文字符的参数时,由于不同系统和环境的编码差异,可能会导致中文参数在传输过程中出现乱码。为了解决这个问题,我们可以利用JavaScript中的`encodeURI`函数来对中文参数进行编码,然后在...

    PB如何提交WEB请求包含中文参数的解决方案全过程.docx

    PB 是 PowerBuilder 的缩写,这是一种流行的开发工具,但是在提交 WEB 请求包含中文参数时,会出现乱码问题。本文将详细介绍如何解决这个问题,包括使用 GETURL 和 POSTURL 方式的尝试,以及最终的解决方案。 问题...

    教学视频--JSP中URL传递中文乱码问题的解决演示.rar

    然而,在实际操作中,我们时常会遇到一个问题,那就是当JSP页面通过URL传递包含中文字符的参数时,可能会出现乱码现象。这个问题主要源于HTTP协议的特性以及字符编码的处理不当。本教学视频将详细讲解如何解决JSP中...

    解决JS传递中文乱码问题

    3. **URL参数传递**:在URL中传递含有中文的参数。 #### 二、问题分析 乱码产生的根本原因在于字符编码不一致或编码转换错误。具体来说,在数据传输过程中涉及到以下几个关键环节: 1. **客户端编码**:前端页面...

    修改Tomcat默认编码消除get方式传递参数出现中文乱码

    ### 修改Tomcat默认编码以消除GET方式传递参数出现的中文乱码 在处理Web应用程序时,尤其是使用Apache Tomcat作为应用服务器的情况下,遇到中文字符乱码的问题是非常常见的。这一问题通常发生在通过GET方法传递含有...

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

    在Web开发中,使用URL传递参数是一种常见的方式,但在处理中文字符时经常会出现乱码问题。由于HTTP协议本身是基于ASCII字符集,而中文字符不是ASCII字符,所以在URL中的中文字符如果不经过特殊处理就会造成乱码。...

Global site tag (gtag.js) - Google Analytics