大概说下整体,基本所有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( "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");
或者jsp页面<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
或者数据库编码设置为utf-8
或者tomcat 中的server.xml添加项目编码
用byte[] b = dataXML.getBytes("iso8859_1"):返回字符串的一个byte数组b
如果b[i]有63,不用转码;
如果b[i]全大于0,那么为英文字符串,不用转码;
如果b[i]有小于0的,那么已经乱码,要转码。 建议最好还是将jsp页面的编码方式统一或者再写个过滤器拦截指定的action
或者对这次action请求加个参数标记,当识别是这次特殊编码的请求时,对其转码就可以了
额 我action是GBK,可是JSP那边是utf-8,action继续提交到我的接口方法里也是GBK啊,这里JSP提交过来到action不是应该用utf-8转gbk么?
JSP之前加过<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>了,没效果
数据库这个改编码方式貌似用不到,现在到action就已经是乱码了,还没提交到数据库了
嗯,其实之前都是统一的GBK,就这次这个模块比较特殊得用UTF-8,下次开发都用utf-8了···吃一堑长一智···不过现在得解决眼前的问题
或者再写个过滤器拦截指定的action
或者对这次action请求加个参数标记,当识别是这次特殊编码的请求时,对其转码就可以了额 俺在主题帖就问这个咋写了,兄台指点指点吧,以前过滤器都是直接/*,这里指定应该是制定具体的action还是指定jsp?如果是action的话是具体到某个方法,还是整个action的文件路径?之前写了一个指定到action.do和action的,反正都没起效似乎,不知道相对路径出了问题还是这样不对,而且因为之前有个全局过滤器了,这个过滤器怎么设置应该?放在全局过滤器前面还是怎样?参数标记比较好弄的话指点指点也行···
开始的时候就在action里了貌似不行··· 以前遇到转码都是用这个来解决··· 这次囧了
确实应该当初就全统一为UTF-8,不过现在数据库啊,接口啊,其他的页面啊都是GBK了,现在如果改过去变动太多了···response和request的setCharacterEncoding我都试过了,目前没效果,我在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编码格式
目前页面编码是utf-8,页面也设置request.setCharacterEncoding("utf-8")了。是post方式
我从另一个页面传到这个页面的值在提交action那边之前是正常的,没乱码,提交到action之后在action里是乱码···在action里response和request的setCharacterEncoding目前都试过了暂时不行还是
new String( dataXML.toString().getBytes( "gbk" ), "utf-8")
双汉字的话可以转过来,单个汉字还是乱码