MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 2 无效

今天这篇文章比较简单,写我昨天新架构中遇到的一个问题,虽然经过网上搜索,很快得到解决,但还是记录一下,方便自己以后查看,也让更多的人可以搜索到.先说一下异常:MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 2 无效,详细的堆栈信息如下:

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 2 无效。

看完堆栈信息,我相信遇到这个问题的同学,已经知道咋回事了。说起来也很简单,就是tomcat跑一个web项目时,报这个异常,导致项目起不来。在仔细看之后,应该是编码问题导致的,对,就是编码问题解决了,看报错的那个XML文件编译之后的情况如下:

 

果然出现了乱码,虽然是注释以后的地方出现了乱码,但项目依然跑不起来了。用Google百度了一下,天下文章一大抄,你抄我来我抄他,归根到底主要有两种方法来解决这个问题:

1. 修改tomcat的startup.bat的代码,说实话这种解决方式真不靠谱,因为这是配置文件乱码,和tomcat的关系能有多大,但老夫还是抱着希望还是要有的,万一解决了呢的态度,试了试,果不其然没有解决,所以就不贴代码了

2. 把配置文件全部改为GBK的编码,对,就是把XML声明的第一行的UTF-8改成GBK,还别说,真给解决了,但我们的项目设定的都是UTF-8,突然把配置文件改成GBK,总归有点别扭,但别扭归别扭,解决了还是可以的,但这种办法也有一个弊端,就是同事那有可能乱码了

3. 不是说有两种吗?为什么会出来了3,这是什么情况,这是老夫不得已提出的一种方法,写什么注释,又不是源码注释,这些注释有谁看,大家都会,把那些出现乱码的地方删了不就完事了,嗯,确实完事了,老夫当时就是这么干的,但有注释总归是好事啊,万一有人不懂呢,万一加入的同事,是吧?不能要求所有人都懂啊

好了,下面给出老夫的彻底解决办法,其实很简单,老夫曾经的文章,对,就是这篇文章中,已经给出解决的办法了,只是老夫当时没在意,所以印象不深刻,很简单,这明显是build的时候出现了编码问题,设定一下build的时候的编码就成了吗,如果懒得看那篇文章,那好,老夫就在这里贴出来解决办法,其实很简单,就是在pom文件中,指定build的编码:

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

什么你还在用Ant,赶紧换Maven吧,Ant那么难用,老夫懒得研究了,如果您知道怎么解决,请留言指出,还有老夫虽然最终解决了这个问题,但说实话,出现这个问题的原因,真的还不是很清楚,因为老夫真的已经把各个地方都设定为:UTF-8了,但他还是出现了乱码,所以如果有同学指定产生的原因,也请留言指出,这里老夫一并谢谢了,谢谢。最后的最后,给出老夫的建议:闲着没事的都设定一下这个build的编码吧,这样能保证你build之后的所有的文件的编码都是UTF-8,虽然不设也许不会出问题,但设定了之后一定能给你减少很多麻烦,而且又不费事。

 

转载于:https://my.oschina.net/zhongshg/blog/1785388

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值