get方法提交中文乱码问题

时间:2022-12-24 13:05:18
       在tomcat6中,我用表单用get方法提交,但如果其中表单参数有中文,提交后接受到的就为就为乱码,
      我以前采取的解决方式是打开tomcat的server.xml文件,找到区块,加入如下一行:URIEncoding=”utf-8” >
      <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding=”utf-8”/>

        这样写是完全可以把问题解决的,但是租服务器的公司不让改动它们的tomcat的任何配置,请问各位怎么办???
        注:因为我们要取到get方法提交的url,所以不能换成post方法,请问各位前辈,在不用改tomcat配置和仍热用get方法情况下,是否有其他中文乱码的解决办法,小弟急呀~~

24 个解决方案

#1


<a href="b.jsp?project_id=1&projectName='意见'">审批 </a> 

参数传递时候使用&隔开,并且传递字符串时候要使用单引号,不能用双引号。
在接受页面使用 

  <%=request.getParameter("project_id")  %> 
  <%=new String(request.getParameter("projectName").getBytes("ISO-8859-1"),"GBK")%> 
因为projectName是汉字所以要进行编码转换,jsp页面传递的时候是使用的ISO-8859-1。

#2


学习

#3


引用 1 楼 jinchun1234 的回复:
<a href="b.jsp?project_id=1&projectName='意见'">审批 </a>

参数传递时候使用&隔开,并且传递字符串时候要使用单引号,不能用双引号。
在接受页面使用

  <%=request.getParameter("project_id")  %>
  <%=new String(request.getParameter("projectName").getBytes("ISO-8859-1"),"GBK")%>
因为projectName是汉字所以要进行编码转换,jsp页面传递的时候是使用的ISO-8859-1。

也可以用过滤器,或者如果你用Struts框架做的话,重写它核心类的process()方法,,,

#4



到处都是这个问题
Csdn就是为了解决乱码问题而存在的吗?

#5


传中文字最好用
URLEncoder.encode(String,"GBK"))
URLDecoder.decode(String,GBK")

#6


或者将你要的参数先转换为json 字符串   再用参数的方式传过去就可以了

#7


你可以在request的时候加上编码,这样就不会有乱码,但每次传都要加
很麻烦,或者如楼上说的,用过滤器

#8


String name=  new String(request.getParameter("name").getBytes( 
"ISO8859-1"), "GBK"); 

  request.setCharacterEncoding("ISO8859-1");   
  ad=request.getParameter("name");   
  byte[]   temp3   =   ad.getBytes("GBK");   
  String   str   =   new   String(temp3);   
  这样就是中文啦!

#9


encodeURI(String)就OK了

<a href="b.jsp?project_id=1&projectName=+encodeURI('意见')">审批 </a> 

#10


1、在JS里对中文参数进行两次转码 

var login_name = document.getElementById("loginname").value;  
login_name = encodeURI(login_name);  
login_name = encodeURI(login_name);  
2、在服务器端对参数进行解码 

String loginName = ParamUtil.getString(request, "login_name");  
loginName = java.net.URLDecoder.decode(loginName,"UTF-8");  

具体请见http://blog.csdn.net/Seven_23/archive/2009/09/02/4510670.aspx 

#11


encodeURI(String)

#12


建议楼主数据库和传送的所有页面都设置utf-8,怎样的话有可能不会出错,也可以根据传值来追踪

#13


以下方法仅在TOMCAT服务器上测试成功:
JSP:
var url = "<%=request.getContextPath()%>/TestEncodeAction.do?dispatch=encode&param=";
url += encodeURIComponent("中文值");
var form = document.forms[0];
form.action = url;
form.submit();

TestEncodeAction.encode
String param = new String(request.getParameter("param").getBytes("ISO-8859-1"), "UTF-8");
System.out.println("param is: " + param);

Console:
param is: 中文值

#14


我给你个过滤器代码。

package common;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodeFilter implements Filter {


public void destroy() {

}


public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
arg0.setCharacterEncoding("utf-8");
arg2.doFilter(arg0, arg1);
arg1.setCharacterEncoding("utf-8");

}


public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}

}


上面是一个过滤器,然后再web.xml里面定义


  <filter>
   <filter-name>encodeFilter</filter-name>
   <filter-class>common.EncodeFilter</filter-class>
  </filter>
  <filter-mapping>
   <filter-name>encodeFilter</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>


我觉得这个还蛮好用,但是编码格式要统一

#15


好久没看到华仔了,顶一个

#16


引用 10 楼 seven_23 的回复:
1、在JS里对中文参数进行两次转码

var login_name = document.getElementById("loginname").value; 
login_name = encodeURI(login_name); 
login_name = encodeURI(login_name); 
2、在服务器端对参数进行解码

String loginName = ParamUtil.getString(request, "login_name"); 
loginName = java.net.URLDecoder.decode(loginName,"UTF-8"); 

具体请见http://blog.csdn.net/Seven_23/archive/2009/09/02/4510670.aspx


顶,这个应该能解决你的问题

#17


这里有很多热心的IT人员,14数的过滤器可能是很多开发人员所采用的,俺们的项目每个都是套用这种方式,很方便很管用

#18


引用 10 楼 seven_23 的回复:
1、在JS里对中文参数进行两次转码

var login_name = document.getElementById("loginname").value; 
login_name = encodeURI(login_name); 
login_name = encodeURI(login_name); 
2、在服务器端对参数进行解码

String loginName = ParamUtil.getString(request, "login_name"); 
loginName = java.net.URLDecoder.decode(loginName,"UTF-8"); 

我也是这样做的.....

#19


可以用的方法以上各楼都说的差不多了,基本上都可以解决你的问题

#20


10楼正解
一般GBK转ISO-8859-1码
在客户端进行2次编码(1次可能依然会有乱码问题)
在服务器进行1次解码
注意的是2端得编码要保持一致,UTF-8或者GBK

#21


String param = new String(request.getParameter("param").getBytes("ISO-8859-1"), "UTF-8"); 

#22


引用 1 楼 jinchun1234 的回复:
<a href="b.jsp?project_id=1&projectName='意见'">审批 </a>

参数传递时候使用&隔开,并且传递字符串时候要使用单引号,不能用双引号。
在接受页面使用

  <%=request.getParameter("project_id")  %>
  <%=new String(request.getParameter("projectName").getBytes("ISO-8859-1"),"GBK")%>
因为projectName是汉字所以要进行编码转换,jsp页面传递的时候是使用的ISO-8859-1。
很不错学习

#23


用过滤器啊。

#24


引用 1 楼 jinchun1234 的回复:
<a href="b.jsp?project_id=1&amp;projectName='意见'">审批 </a> 

参数传递时候使用&amp;隔开,并且传递字符串时候要使用单引号,不能用双引号。
在接受页面使用 

  <%=request.getParameter("project_id")  %> 
  <%=new String(request.getParameter("……
搞定!!!!

#1


<a href="b.jsp?project_id=1&projectName='意见'">审批 </a> 

参数传递时候使用&隔开,并且传递字符串时候要使用单引号,不能用双引号。
在接受页面使用 

  <%=request.getParameter("project_id")  %> 
  <%=new String(request.getParameter("projectName").getBytes("ISO-8859-1"),"GBK")%> 
因为projectName是汉字所以要进行编码转换,jsp页面传递的时候是使用的ISO-8859-1。

#2


学习

#3


引用 1 楼 jinchun1234 的回复:
<a href="b.jsp?project_id=1&projectName='意见'">审批 </a>

参数传递时候使用&隔开,并且传递字符串时候要使用单引号,不能用双引号。
在接受页面使用

  <%=request.getParameter("project_id")  %>
  <%=new String(request.getParameter("projectName").getBytes("ISO-8859-1"),"GBK")%>
因为projectName是汉字所以要进行编码转换,jsp页面传递的时候是使用的ISO-8859-1。

也可以用过滤器,或者如果你用Struts框架做的话,重写它核心类的process()方法,,,

#4



到处都是这个问题
Csdn就是为了解决乱码问题而存在的吗?

#5


传中文字最好用
URLEncoder.encode(String,"GBK"))
URLDecoder.decode(String,GBK")

#6


或者将你要的参数先转换为json 字符串   再用参数的方式传过去就可以了

#7


你可以在request的时候加上编码,这样就不会有乱码,但每次传都要加
很麻烦,或者如楼上说的,用过滤器

#8


String name=  new String(request.getParameter("name").getBytes( 
"ISO8859-1"), "GBK"); 

  request.setCharacterEncoding("ISO8859-1");   
  ad=request.getParameter("name");   
  byte[]   temp3   =   ad.getBytes("GBK");   
  String   str   =   new   String(temp3);   
  这样就是中文啦!

#9


encodeURI(String)就OK了

<a href="b.jsp?project_id=1&projectName=+encodeURI('意见')">审批 </a> 

#10


1、在JS里对中文参数进行两次转码 

var login_name = document.getElementById("loginname").value;  
login_name = encodeURI(login_name);  
login_name = encodeURI(login_name);  
2、在服务器端对参数进行解码 

String loginName = ParamUtil.getString(request, "login_name");  
loginName = java.net.URLDecoder.decode(loginName,"UTF-8");  

具体请见http://blog.csdn.net/Seven_23/archive/2009/09/02/4510670.aspx 

#11


encodeURI(String)

#12


建议楼主数据库和传送的所有页面都设置utf-8,怎样的话有可能不会出错,也可以根据传值来追踪

#13


以下方法仅在TOMCAT服务器上测试成功:
JSP:
var url = "<%=request.getContextPath()%>/TestEncodeAction.do?dispatch=encode&param=";
url += encodeURIComponent("中文值");
var form = document.forms[0];
form.action = url;
form.submit();

TestEncodeAction.encode
String param = new String(request.getParameter("param").getBytes("ISO-8859-1"), "UTF-8");
System.out.println("param is: " + param);

Console:
param is: 中文值

#14


我给你个过滤器代码。

package common;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodeFilter implements Filter {


public void destroy() {

}


public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
arg0.setCharacterEncoding("utf-8");
arg2.doFilter(arg0, arg1);
arg1.setCharacterEncoding("utf-8");

}


public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}

}


上面是一个过滤器,然后再web.xml里面定义


  <filter>
   <filter-name>encodeFilter</filter-name>
   <filter-class>common.EncodeFilter</filter-class>
  </filter>
  <filter-mapping>
   <filter-name>encodeFilter</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>


我觉得这个还蛮好用,但是编码格式要统一

#15


好久没看到华仔了,顶一个

#16


引用 10 楼 seven_23 的回复:
1、在JS里对中文参数进行两次转码

var login_name = document.getElementById("loginname").value; 
login_name = encodeURI(login_name); 
login_name = encodeURI(login_name); 
2、在服务器端对参数进行解码

String loginName = ParamUtil.getString(request, "login_name"); 
loginName = java.net.URLDecoder.decode(loginName,"UTF-8"); 

具体请见http://blog.csdn.net/Seven_23/archive/2009/09/02/4510670.aspx


顶,这个应该能解决你的问题

#17


这里有很多热心的IT人员,14数的过滤器可能是很多开发人员所采用的,俺们的项目每个都是套用这种方式,很方便很管用

#18


引用 10 楼 seven_23 的回复:
1、在JS里对中文参数进行两次转码

var login_name = document.getElementById("loginname").value; 
login_name = encodeURI(login_name); 
login_name = encodeURI(login_name); 
2、在服务器端对参数进行解码

String loginName = ParamUtil.getString(request, "login_name"); 
loginName = java.net.URLDecoder.decode(loginName,"UTF-8"); 

我也是这样做的.....

#19


可以用的方法以上各楼都说的差不多了,基本上都可以解决你的问题

#20


10楼正解
一般GBK转ISO-8859-1码
在客户端进行2次编码(1次可能依然会有乱码问题)
在服务器进行1次解码
注意的是2端得编码要保持一致,UTF-8或者GBK

#21


String param = new String(request.getParameter("param").getBytes("ISO-8859-1"), "UTF-8"); 

#22


引用 1 楼 jinchun1234 的回复:
<a href="b.jsp?project_id=1&projectName='意见'">审批 </a>

参数传递时候使用&隔开,并且传递字符串时候要使用单引号,不能用双引号。
在接受页面使用

  <%=request.getParameter("project_id")  %>
  <%=new String(request.getParameter("projectName").getBytes("ISO-8859-1"),"GBK")%>
因为projectName是汉字所以要进行编码转换,jsp页面传递的时候是使用的ISO-8859-1。
很不错学习

#23


用过滤器啊。

#24


引用 1 楼 jinchun1234 的回复:
<a href="b.jsp?project_id=1&amp;projectName='意见'">审批 </a> 

参数传递时候使用&amp;隔开,并且传递字符串时候要使用单引号,不能用双引号。
在接受页面使用 

  <%=request.getParameter("project_id")  %> 
  <%=new String(request.getParameter("……
搞定!!!!