解决web项目中发送文字乱码以及Tomcat 7控制台打印乱码问题

一、背景

工具:Myeclipse
环境:Windows 7 64位
服务器:Tomcat 7

最近,公司在做一个微信公众号开发的项目,与微信开发文档打了几天交道后,自己实现了不少的功能,但是在年底假期将至的催促下,我不得不加快进度,经同事推荐,我在开源社区GitHub上找到了几个成熟的微信开发框架,在这里给大家推荐一下,如果喜欢用功能封装全面的,建议选择https://github.com/MyWikey/weixin-java-tools,功能很多,并且采用了Maven,但是因为配置复杂,所以我没选择;而是选择了一个叫WeChat4j的框架,里面封装的功能我大体看了下,基本够我用的了,github地址:https://github.com/MyWikey/wechat4j,主要是这个框架的开发文档写的特别好,感觉很简介、明确,API文档也让我很欣喜,另外不用去配置太多东西,在这里具体的配置步骤就不说了,后面项目完事会将我的过程总结一下,现在回到正题。

二、问题及原因

下载下这个框架并对我的微信一些参数配置完后,我想用这个WeChat4j框架实现这样一个功能:用户发送1,服务器向用户发送一个menu菜单,大体是这个样子:

    sBuilder.append("感谢关注我们的服务号\n\n");
    sBuilder.append("青岛XX在此祝您新年快乐\n\n");
    sBuilder.append("目前服务号正在开发中,给您带来不便请谅解!\n");

但是当我把项目部署到Tomcat 7 的时候,我发现log信息打印出来的还有给用户反馈的消息竟然都是乱码,我首先在doGet()方法中添加了这段代码:

    response.setCharacterEncoding("UTF-8");
    response.setHeader("content-type", "text/html;charset=UTF-8");

但是并没有什么用,重新部署后仍然是这个样子,于是我就上网搜啊搜,看到这个一篇帖子,我突然就懂了,大家可以自己去看看:http://blog.csdn.net/the_direwolf/article/details/45587727,说的很好,根据很多人的经验,确实觉得一般统一设置为uft-8即可避免中文乱码问题,但是这里不一样,原因是在框架中很多代码,在执行时均未能识别中文编码,即均未按utf-8进行解码,而是调用了系统的字符集进行了解码,大家都知道windows中默认的系统字符集一般为GBK,所以无论我们怎么设置,系统的字符集是不会变的,在这里,特别感谢这位大神,要不是它这篇文章,我或许已经放弃了,再次感谢。

好了,找到了原因,那我们怎么去修改呢,其实根本的解决办法就是修改系统默认的字符集或修改jvm默认的字符集,而jvm跟系统的字符集默认是一样的,根据上面那位大神所说的,他在linux下面的操作,我们就会想到,在MyEclipse的jdk的选择地方,也就是windows->preference->java->Intstalled JRES中是不是也能够选择jvm启动的参数呢,其实是可以的,我们只需要这样修改:

这里写图片描述

把-Dfile.encoding=UTF-8添加到那里你再重新部署一下项目,你就会发现,发送到用户微信上的消息正常了,竟然不是乱码了,好开心啊,但是呢,tomcat打印打控制台的信息还有log4j打印出来的信息统统变成了乱码,悲剧了,这以后可让处女座的我怎么活啊,只能继续查找原因,终于经过1个小时的苦苦挣扎和寻找,正准备放弃呢,又有一位大神超人般出现在我的身旁,先鞠一躬,再上地址:http://blog.csdn.net/colin91/article/details/19976967,这篇博客,大神写的很明确,大家可以看下,我就不重复了,一步步做完,你会发现,tomcat以及打印信息一切正常,(我不会告诉你,此时的我开心的像只猴子)。

三、总结

记下这篇博客,是希望大家以后碰到这种问题可以参考一下,另外最重要的,是不要放弃自己碰到的每一个bug,当你忍不住要放弃的时候,或许他离你很近很近,只是因为霾太大,你看不清楚,一起坚持吧!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值