日期:2014-05-17  浏览次数:20701 次

JSP页面是UTF-8,此时该页面提交到action时,action中的中文值乱码如何解决
大概说下整体,基本所有JSP都是设成的GBK。这个部分首先我是一个页面,分为左,右上,右下,右上的JSP提交时需要提交到其余两个页面,所有一个用的是action提交到右下,左侧就用的location左页面加参数来做的

但其中左侧页面有特殊用途所以需要设置为UTF-8,action因为过滤器设置编码是GBK(下面有该过滤器此部分设置),此时该页面提交到action时,action中的中文值乱码。请问如何解决?
 
试过 new String( dataXML.toString().getBytes( "utf-8" ), "gbk");这样貌似转没用

试过把过滤器
<filter-name>Set Character Encoding</filter-name>
  <filter-class>com.tvlink.util.SetCharacterEncodingFilter</filter-class>
  <init-param>
  <param-name>encoding</param-name>
  <param-value>GBK</param-value>
  </init-param>
  </filter>
  <filter-mapping>
  <filter-name>Set Character Encoding</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping> 
中的GBK替换成UTF-8,然后action里加上request.setCharacterEncoding("utf-8");可以解决这个问题倒是,但是其他的JSP页面全都是GBK的,这个页面因为有特殊需要所以必须得UTF-8,如果单独设置该过滤器,前面的全局过滤器如何修改?这个单独的过滤器怎么写呢?应该写我action的地址还是我提交表单的jsp的地址···


或者有其他什么办法,多谢

页面提交到action里之前都是没问题的,已经设置 request.seteccoding('UTF-8')来取参了

------解决方案--------------------
new String( dataXML.toString().getBytes( "gbk" ), "utf-8");

这样才转成utf-8格式吧
------解决方案--------------------
尽量使用post提交。设置请求和响应过滤器设置字符编码
------解决方案--------------------
urldecode
或者后台
new String( dataXML.toString().getBytes( "gbk" ), "utf-8");
或者jsp页面<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
或者数据库编码设置为utf-8
或者tomcat 中的server.xml添加项目编码
------解决方案--------------------
new String( dataXML.toString().getBytes( "gbk" ), "utf-8"); 建议还是所有jsp页面和程序中统一编码风格
------解决方案--------------------
可以试试这样看看
用byte[] b = dataXML.getBytes("iso8859_1"):返回字符串的一个byte数组b
如果b[i]有63,不用转码; 
如果b[i]全大于0,那么为英文字符串,不用转码; 
如果b[i]有小于0的,那么已经乱码,要转码。

建议最好还是将jsp页面的编码方式统一

或者再写个过滤器拦截指定的action
或者对这次action请求加个参数标记,当识别是这次特殊编码的请求时,对其转码就可以了
------解决方案--------------------

post提交:
单个页面设置request.setCharacterEncoding("")指定编码方式
或配置过滤器,可以很好解决乱码问题
get提交:
在tomcat\conf下server.xml配置文件中<Connector port="8080" ....../>内添加属性URIEncoding="UTF-8"即可,完整如下:
<Connector port= "8080 " protocol= "HTTP/1.1 "
connectionTimeout= "20000 "
redirectPort= "8443 " URIEncoding=”utf-8”/> 
解决乱码问题
或单个页面内手动转换参数编码格式也可,
String str = request.getParameter("...");
byte[] bytesStr = str.getBytes("ISO-8859-1");
String str = new String(bytesStr, "UTF-8");
此时str便是UTF-8编码格式