ssh linux mysql 乱码_SSH2整合出现中文乱码:form提交的中文数据传到了action显乱码...

哎,被中文乱码高的晕头转向。在网上搜索的各种方法都用过,form提交的中文数据到action方法里都还是现实中文乱码。

1在Tomcat里面的server.xml把编码改成了UTF-8。

2在项目的属性的Resource里把Test file encoding改为UTF-8。

3手动编写过过滤器。

4使用过自带的编码过滤器(org.springframework.web.filter.CharacterEncodingFilter)。

5在JSP页面里加上了

6action的方法中有进行过转码:String nameUTF8=new String(admin.getName().getBytes("ISO8859-1"), "UTF-8")或者String nameUTF8=URLDecoder.decode(admin.getName(),"utf-8"),控制台打印的还是乱码。用第一个转码打印的乱码是“????”,而第二个打印的是“閭撶悊閿?”。

7在struts.xml里也加上了

在赶毕业设计,被中文乱码耽搁了进程,抑郁不能解。希望好心人士的解答。谢谢

问题补充:

ethen 写道

你可以看下,应该可以解决

http://ethen.iteye.com/blog/797775

hope it helpful to you!

我的是我也把页面上的加上,但我的是form提交,struts2的action继承ModelDriven直接admin.getName()可以得到数据,但都是中文乱码!!!好烦!!希望更多的人来解决...

问题补充:

andy_javahome 写道

把你的admin.getName()打印一下粘出来看看是什么样。

6action的方法中有进行过转码:String nameUTF8=new String(admin.getName().getBytes("ISO8859-1"), "UTF-8")或者String nameUTF8=URLDecoder.decode(admin.getName(),"utf-8"),控制台打印的还是乱码。用第一个转码打印的乱码是“????”,而第二个打印的是“閭撶悊閿?”。

这就是打印出来的效果

问题补充:

andy_javahome 写道

呵呵  我说让你打印没转码的 看是什么编码

好的,没转码的打印出来是“閭撶悊閿?”

问题补充:

andy_javahome 写道

呵呵  我说让你打印没转码的 看是什么编码

没转码System.out.println("action->admin.getName()="+admin.getName())打印出来的和我说的第二种转码一样String nameUTF8=URLDecoder.decode(admin.getName(),"utf-8")。

这是我的JSPUTF-8的设置和内容:

登录页面

login_main.jpg

用户名:
密&nbsp&nbsp码:

&nbsp&nbsp

问题补充:

andy_javahome 写道

把头改成 试一试

还是不行

问题补充:过滤器一:

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8");

chain.doFilter(request,response);

System.out.println("过滤器utf-8");

}

characterEncoding

dlr.co.util.CharacterEncodingFilter

characterEncoding

/*

过滤器二:

SetCharacterEncoding

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

forceEncoding

true

SetCharacterEncoding

/*

REQUEST

FORWARD

INCLUDE

SetCharacterEncoding

*.jsp

问题补充:

tcl1122 写道

如果真是像楼主说的那样 所有的方法都试了 无济于事

那么楼主不妨试试将项目中的文件拷贝出来 做一下文件编码转化 然后再复制到项目里面去

具体操作在下面:

http://www.cnblogs.com/eflylab/archive/2008/07/08/1238550.html

祝你好运。

还没解决,我下载了EditPlus-v3.0.336H,转了后缀为.jsp .java .xml文件的编码为UTF-8,但还是不行。

问题补充:

andy_javahome 写道

经鉴定“閭撶悊閿?”是GBK被转化成往utf-8的结果,用new String("閭撶悊閿?".getBytes("GBK"),"UTF-8")可以将部分数据转化回来“邓理??”,但由于utf-8一个汉字占三个字节GBK则是两个字节。

怀疑你的filter里用了GBK编码。一般在web.xml配的,如果你用是MyEclipse可用ctrl+h检索一下,文件类型那用*.*  看看哪里这是了GBK或者GB2312了

我穷举打印:

System.out.println("action->admin.getName()="+admin.getName());

System.out.println("开始转码@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");System.out.println(new String(admin.getName().getBytes("ISO-8859-1"),"UTF-8"));

System.out.println(new String(admin.getName().getBytes("UTF8"),"UTF-8"));

System.out.println(new String(admin.getName().getBytes("GB2312"),"UTF-8"));

System.out.println(new String(admin.getName().getBytes("GBK"),"UTF-8"));

System.out.println(new String(admin.getName().getBytes("BIG5"),"UTF-8"));

System.out.println(URLEncoder.encode(admin.getName(),"UTF-8"));

System.out.println(URLDecoder.decode(admin.getName(),"UTF-8"));

效果如下:

action->admin.getName()=閭撶悊閿?

开始转@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

?????

閭撶悊閿?

?????

邓理??

?[??Q?L?

%E9%96%AD%E6%92%B6%E6%82%8A%E9%96%BF%EF%BF%BD

閭撶悊閿?

可以看出System.out.println(newString(admin.getName().getBytes("GBK"),"UTF-8"));打印出“邓理??”。不知你说的对不对,但我没用GBK过滤器。

问题补充:

andy_javahome 写道

经鉴定“閭撶悊閿?”是GBK被转化成往utf-8的结果,用new String("閭撶悊閿?".getBytes("GBK"),"UTF-8")可以将部分数据转化回来“邓理??”,但由于utf-8一个汉字占三个字节GBK则是两个字节。

怀疑你的filter里用了GBK编码。一般在web.xml配的,如果你用是MyEclipse可用ctrl+h检索一下,文件类型那用*.*  看看哪里这是了GBK或者GB2312了

我用的是MyEclipse8.5,怎样“ctrl+h检索一下,文件类型那用*.*  看看哪里这是了GBK或者GB2312了”,能具体一点吗

问题补充:      哈哈!终于解决了。我重新建立了新web项目,把以前的所有文件拷进去,居然成功解决了form传来的中文值。andy_javahome猜的其中一些可能是对的,之前我项目做到中途才把GBK转化为UTF-8,导致改得不彻底。现在新建项目,先改为UTF-8,再拷贝文件进去。

接下来不用转码都可以把form传来的中文值成功打印出来。也谢谢所有一起帮我解决中文乱码的人,算是增长了知识。希望这帖可以起到帮助所有遇到我这种相同中文乱码问题的人。

SSH2解决中文乱码总结(其他GBk等都一样吧):

1在Tomcat里面的server.xml把编码改成了UTF-8。

2新建立项目后,首先在项目的属性的Resource里把Test file encoding改为UTF-8。;如果你做到中途再设置的话,可能会改得不彻底。(我可能就是中途才把GBK改为UTF-8导致几天都解决不了,现在新建项目先设定为UTF-8才成功。)

3使用编码过滤器(org.springframework.web.filter.CharacterEncodingFilter),配置如下:

SetCharacterEncoding

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

forceEncoding

true

4在JSP页面里加上了

5在struts.xml里也加上了

6连接数据库的语句jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf-8

7我mysql用的管理软件是Navicat,新建连接时,在”高级“里使用默认的选项,即”使用MySQL字符集“和编码是“65001(UTF-8)”。

8在Navicat里手动创建数据库时,SQL语句建表示例:CREATE TABLE `co_admin` (

`id` int(10) NOT NULL AUTO_INCREMENT,

`name` varchar(20) NOT NULL,

`password` varchar(20) NOT NULL,

`email` varchar(20) DEFAULT NULL,

`role` int(10) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;

记得后面要加上DEFAULT CHARSET=utf8。

9需要转码的地方在页面和页面之间通过URL传输中文数据时才需要转码:如a.jsp链接到b.jsp时,a.jsp页面要使用String name=URLEncoder.encode( nameStr, "UTF-8")编码,然后链接href="background/manager/modifyAdmin.jsp?name=。b.jsp要得到中文参数要转码解码,String name=new String(request.getParameter("name").getBytes("iso8859-1"),"utf-8")解码即可。但你使用struts标签时加在链接里作为参数传输中文参数就比较困难,如a.jsp里面的链接href="background/manager/modifyAdmin.jsp?name=name=,这样在a.jsp里就用不了String name=URLEncoder.encode( nameStr, "UTF-8")编码,如果你用的是IE浏览器,然后b.jsp得到中文个数如果是单数的话,如“中国人”从a转到b就会变成“中国口”,个数为双数的话就不会。如果你用的是火狐就单双数中文都系那是正常。即struts2标签库作为参数放进链接(因a.jsp没编码,b.jsp解码时就不能保证),得到中文数目为单的参数时最后一个字变成类似“口”字。

10javascript的中文乱码本人暂时还没遇到,所以没写总结。

这样一来可以完整得解决整个项目的中文乱码问题,这样action或者业务方法等都不用转码,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值