一、背景

工具: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,当你忍不住要放弃的时候,或许他离你很近很近,只是因为霾太大,你看不清楚,一起坚持吧!!

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

  1. 解决Web项目中图片无法显示问题

    问题描述 在web目录下创建了images文件夹用来存放图片,在web目录再创建HTML文件,该文件中的img标签引用了images里面的图片,但是启动服务器时,页面上的图片无法显示. 解决问题  将 ...

  2. 解决·web项目在浏览器页面上乱码

    晚上部署web项目至云端服务器,测试的时候发现页面乱码,改变浏览器编码,仍然无效.于是去更改tomcat配置文件中的编码方式,默认情况下,tomcat使用的的编码方式是 iso8859-1,修改tom ...

  3. 通过过滤器Filter解决web项目的中文乱码问题

    事先说明:这里的问题解决是针对web项目中怎么通过Filter过滤器解决当前项目下所有Servlet资源的中文乱码问题. 一是post请求出现的中文乱码: 二是respose输出字符流出现的中文乱码问 ...

  4. JAVA Web项目中所出现错误及解决方式合集(不断更新中)

    JAVA Web项目中所出现错误及解决方式合集 前言 一.几个或许会用到的软件下载官网 二.Eclipse的[preferences]下没有[sever]选项 三.Tomcat的安装路径找不到 四.T ...

  5. 解决“Maven项目中的Dynamic Web Module 3.0 requires Java 1.6 or newer”问题

    转载自   解决"Maven项目中的Dynamic Web Module 3.0 requires Java 1.6 or newer"问题 错误描述 当创建有动态web模块3.0 ...

  6. 在Web项目中保存会话的两种方法:Cookie和Session

    Web浏览器是与Web服务器之间的会话是一个不保持的会话,浏览器发起请求,建立会话,获得结果后,会话就不在了.然而,在涉及到用户登录Web项目中,开发人员必须有一种方法,区分用户登录前后的状态,以便对 ...

  7. 实战:在Java Web项目中使用HBase

    在此之前我们使用MySQL作为数据源,但发现这数据增长速度太快,并且由于种种原因,因此必须使用HBase,所以我们要把Mysql表里面的数据迁移到HBase中,在这里我就不讲解.不争论为什么要使用HB ...

  8. maven web项目中的web.xml的版本如何更改

    maven web项目中的web.xml的版本如何更改 问题 因web.xml的版本太低不支持el表达式的问题(maven3.6版本通过底层的maven web插件生成的最终的web.xml文件版本只 ...

  9. java socket建立长连接_Java Web项目中使用Socket通信多线程、长连接的方法

    很多时候在javaweb项目中我们需要用到Socket通信来实现功能,在web中使用Socket我们需要建立一个监听程序,在程序启动时,启动socket监听.我们的应用场景是在java项目中,需要外接 ...

最新文章

  1. 【怎样写代码】工厂三兄弟之抽象工厂模式(六):扩展案例II
  2. ibtmp1文件过大
  3. HLG 1349 Graph [floyed]
  4. android反编译的方法
  5. JAVA_OA(六):SpringMVC拦截器
  6. webots自学笔记(七)通过定义顶点构件3D形状(IndexedFaceSet节点)
  7. 微信小程序影视评论交流平台系统毕业设计毕设(6)开题答辩PPT
  8. 白+黑(白利用)漏洞加载木马技术解析
  9. 「Python网络编程」如何让蔡徐坤同时唱跳rap篮球/初识多线程(二)
  10. linux读和写线程同步,Linux:使用读写锁使线程同步
  11. html5制作新年祝福,2018新年祝福贺卡制作
  12. gc overhead limit exceeded解决方案
  13. QFile读取移动硬盘文件卡死问题
  14. MySQL字符串数据类型
  15. java cancel_Future.cancel()疑难杂症
  16. 无法建立与远程计算机连接,解决“不能建立到远程计算机的连接,因此用于此...”的方法_常见问题解析...
  17. 日常计算机桌面系统的维护,新手学电脑日常维护与故障排除
  18. 阿里妈妈:品牌广告中的NLP算法实践
  19. EdgeTX/OpenTX逻辑开关教程
  20. 读 Eric S. Raymond 大教堂与市集

热门文章

  1. jom qt linux,Qt Creator 使用技巧之提高编译速度【使用jom参数】
  2. 【动手配置全景云平台系列】krpano全景网站源码微信打赏功能配置使用教程
  3. 无人机遥感图像拼接与处理,速成方法
  4. win10taskkill强行结束进程_通过命令行强制结束进程
  5. 全球主题公园集团十强公布;华晨宇自创潮流品牌引入区块链加密技术 | 美通企业日报...
  6. 【LeetCode】121. 买入和卖出股票的最佳时间
  7. UE4-(雾效)光束光晕、光束遮蔽
  8. 用通俗的解释,向你解释清楚大数据、人工智能和机器人之间的关系
  9. 为什么阿里巴巴不喜欢招聘应届生?
  10. python 上位机直接与西门子变频器建立通信