JSP页面是UTF-8,此时该页面提交到action时,action中的中文值乱码如何解决

时间:2022-01-21 13:04:44
大概说下整体,基本所有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')来取参了

22 个解决方案

#1


new String( dataXML.toString().getBytes( "gbk" ), "utf-8");

这样才转成utf-8格式吧

#2


貌似楼上是正确的...

#3


试试楼上说的方法,看看行不行啊!

#4


尽量使用post提交。设置请求和响应过滤器设置字符编码

#5


urldecode
或者后台
new String( dataXML.toString().getBytes( "gbk" ), "utf-8");
或者jsp页面<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
或者数据库编码设置为utf-8
或者tomcat 中的server.xml添加项目编码

#6


new String( dataXML.toString().getBytes( "gbk" ), "utf-8");  建议还是所有jsp页面和程序中统一编码风格

#7


这个问题我前两天也遇到过,后来用了struts2的标签库的标签,form表单里设置这个属性即可enctype="multipart/form-data"

#8


引用 7 楼  的回复:
这个问题我前两天也遇到过,后来用了struts2的标签库的标签,form表单里设置这个属性即可enctype="multipart/form-data"

你这个是文件上传下载使用的属性好不好?

#9


可以试试这样看看
用byte[] b = dataXML.getBytes("iso8859_1"):返回字符串的一个byte数组b
如果b[i]有63,不用转码; 
如果b[i]全大于0,那么为英文字符串,不用转码; 
如果b[i]有小于0的,那么已经乱码,要转码。  

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

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

#10


可以用js里的转码方式然后自己写一个转码类

#11


引用 1 楼  的回复:
new String( dataXML.toString().getBytes( "gbk" ), "utf-8");

这样才转成utf-8格式吧


额 我action是GBK,可是JSP那边是utf-8,action继续提交到我的接口方法里也是GBK啊,这里JSP提交过来到action不是应该用utf-8转gbk么? 

#12


不过这样反过来试貌似也没起效

#13


引用 5 楼  的回复:
urldecode
或者后台
new String( dataXML.toString().getBytes( "gbk" ), "utf-8");
或者jsp页面<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
或者数据库编码设置为utf-8
或者tomcat 中的server.xml添加项目编码


JSP之前加过<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>了,没效果
数据库这个改编码方式貌似用不到,现在到action就已经是乱码了,还没提交到数据库了

#14


引用 5 楼  的回复:
urldecode
或者后台
new String( dataXML.toString().getBytes( "gbk" ), "utf-8");
或者jsp页面<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
或者数据库编码设置为utf-8
或者tomcat 中的server.xml添加项目编码

此楼写的最详细

#15


引用 9 楼  的回复:
可以试试这样看看
用byte[] b = dataXML.getBytes("iso8859_1"):返回字符串的一个byte数组b
如果b[i]有63,不用转码; 
如果b[i]全大于0,那么为英文字符串,不用转码; 
如果b[i]有小于0的,那么已经乱码,要转码。  

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

或者再写个过滤器拦截指定的action
或者对这次action请……


嗯,其实之前都是统一的GBK,就这次这个模块比较特殊得用UTF-8,下次开发都用utf-8了···吃一堑长一智···不过现在得解决眼前的问题
或者再写个过滤器拦截指定的action
或者对这次action请求加个参数标记,当识别是这次特殊编码的请求时,对其转码就可以


额 俺在主题帖就问这个咋写了,兄台指点指点吧,以前过滤器都是直接/*,这里指定应该是制定具体的action还是指定jsp?如果是action的话是具体到某个方法,还是整个action的文件路径?之前写了一个指定到action.do和action的,反正都没起效似乎,不知道相对路径出了问题还是这样不对,而且因为之前有个全局过滤器了,这个过滤器怎么设置应该?放在全局过滤器前面还是怎样?

参数标记比较好弄的话指点指点也行···

#16


引用 6 楼  的回复:
new String( dataXML.toString().getBytes( "gbk" ), "utf-8"); 建议还是所有jsp页面和程序中统一编码风格


开始的时候就在action里了貌似不行··· 以前遇到转码都是用这个来解决··· 这次囧了

#17


建议全统一utf-8,要不试试response.setCharacterEncoding("UTF-8");

#18


引用 17 楼  的回复:
建议全统一utf-8,要不试试response.setCharacterEncoding("UTF-8");


确实应该当初就全统一为UTF-8,不过现在数据库啊,接口啊,其他的页面啊都是GBK了,现在如果改过去变动太多了···

response和request的setCharacterEncoding我都试过了,目前没效果,我在action的每个方法中最开头就设置这个了

#19


把请求和响应还有页面的编码弄成一样的就可以了。 

#20



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编码格式

#21


引用 20 楼  的回复:
post提交:
单个页面设置request.setCharacterEncoding("")指定编码方式
或配置过滤器,可以很好解决乱码问题
get提交:
在tomcat\conf下server.xml配置文件中<Connector port="8080" ....../>内添加属性URIEncoding="UTF-8"即可,完整如下:
<Connector port= "8080 " ……


目前页面编码是utf-8,页面也设置request.setCharacterEncoding("utf-8")了。是post方式
我从另一个页面传到这个页面的值在提交action那边之前是正常的,没乱码,提交到action之后在action里是乱码···在action里response和request的setCharacterEncoding目前都试过了暂时不行还是

#22


在action里用
new String( dataXML.toString().getBytes( "gbk" ), "utf-8")
双汉字的话可以转过来,单个汉字还是乱码

#1


new String( dataXML.toString().getBytes( "gbk" ), "utf-8");

这样才转成utf-8格式吧

#2


貌似楼上是正确的...

#3


试试楼上说的方法,看看行不行啊!

#4


尽量使用post提交。设置请求和响应过滤器设置字符编码

#5


urldecode
或者后台
new String( dataXML.toString().getBytes( "gbk" ), "utf-8");
或者jsp页面<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
或者数据库编码设置为utf-8
或者tomcat 中的server.xml添加项目编码

#6


new String( dataXML.toString().getBytes( "gbk" ), "utf-8");  建议还是所有jsp页面和程序中统一编码风格

#7


这个问题我前两天也遇到过,后来用了struts2的标签库的标签,form表单里设置这个属性即可enctype="multipart/form-data"

#8


引用 7 楼  的回复:
这个问题我前两天也遇到过,后来用了struts2的标签库的标签,form表单里设置这个属性即可enctype="multipart/form-data"

你这个是文件上传下载使用的属性好不好?

#9


可以试试这样看看
用byte[] b = dataXML.getBytes("iso8859_1"):返回字符串的一个byte数组b
如果b[i]有63,不用转码; 
如果b[i]全大于0,那么为英文字符串,不用转码; 
如果b[i]有小于0的,那么已经乱码,要转码。  

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

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

#10


可以用js里的转码方式然后自己写一个转码类

#11


引用 1 楼  的回复:
new String( dataXML.toString().getBytes( "gbk" ), "utf-8");

这样才转成utf-8格式吧


额 我action是GBK,可是JSP那边是utf-8,action继续提交到我的接口方法里也是GBK啊,这里JSP提交过来到action不是应该用utf-8转gbk么? 

#12


不过这样反过来试貌似也没起效

#13


引用 5 楼  的回复:
urldecode
或者后台
new String( dataXML.toString().getBytes( "gbk" ), "utf-8");
或者jsp页面<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
或者数据库编码设置为utf-8
或者tomcat 中的server.xml添加项目编码


JSP之前加过<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>了,没效果
数据库这个改编码方式貌似用不到,现在到action就已经是乱码了,还没提交到数据库了

#14


引用 5 楼  的回复:
urldecode
或者后台
new String( dataXML.toString().getBytes( "gbk" ), "utf-8");
或者jsp页面<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
或者数据库编码设置为utf-8
或者tomcat 中的server.xml添加项目编码

此楼写的最详细

#15


引用 9 楼  的回复:
可以试试这样看看
用byte[] b = dataXML.getBytes("iso8859_1"):返回字符串的一个byte数组b
如果b[i]有63,不用转码; 
如果b[i]全大于0,那么为英文字符串,不用转码; 
如果b[i]有小于0的,那么已经乱码,要转码。  

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

或者再写个过滤器拦截指定的action
或者对这次action请……


嗯,其实之前都是统一的GBK,就这次这个模块比较特殊得用UTF-8,下次开发都用utf-8了···吃一堑长一智···不过现在得解决眼前的问题
或者再写个过滤器拦截指定的action
或者对这次action请求加个参数标记,当识别是这次特殊编码的请求时,对其转码就可以


额 俺在主题帖就问这个咋写了,兄台指点指点吧,以前过滤器都是直接/*,这里指定应该是制定具体的action还是指定jsp?如果是action的话是具体到某个方法,还是整个action的文件路径?之前写了一个指定到action.do和action的,反正都没起效似乎,不知道相对路径出了问题还是这样不对,而且因为之前有个全局过滤器了,这个过滤器怎么设置应该?放在全局过滤器前面还是怎样?

参数标记比较好弄的话指点指点也行···

#16


引用 6 楼  的回复:
new String( dataXML.toString().getBytes( "gbk" ), "utf-8"); 建议还是所有jsp页面和程序中统一编码风格


开始的时候就在action里了貌似不行··· 以前遇到转码都是用这个来解决··· 这次囧了

#17


建议全统一utf-8,要不试试response.setCharacterEncoding("UTF-8");

#18


引用 17 楼  的回复:
建议全统一utf-8,要不试试response.setCharacterEncoding("UTF-8");


确实应该当初就全统一为UTF-8,不过现在数据库啊,接口啊,其他的页面啊都是GBK了,现在如果改过去变动太多了···

response和request的setCharacterEncoding我都试过了,目前没效果,我在action的每个方法中最开头就设置这个了

#19


把请求和响应还有页面的编码弄成一样的就可以了。 

#20



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编码格式

#21


引用 20 楼  的回复:
post提交:
单个页面设置request.setCharacterEncoding("")指定编码方式
或配置过滤器,可以很好解决乱码问题
get提交:
在tomcat\conf下server.xml配置文件中<Connector port="8080" ....../>内添加属性URIEncoding="UTF-8"即可,完整如下:
<Connector port= "8080 " ……


目前页面编码是utf-8,页面也设置request.setCharacterEncoding("utf-8")了。是post方式
我从另一个页面传到这个页面的值在提交action那边之前是正常的,没乱码,提交到action之后在action里是乱码···在action里response和request的setCharacterEncoding目前都试过了暂时不行还是

#22


在action里用
new String( dataXML.toString().getBytes( "gbk" ), "utf-8")
双汉字的话可以转过来,单个汉字还是乱码