一. 前言
我们在使用xml配置文件时,经常会使用中文注释来进行备注和提示。但有些情况下添加中文字符的注释,会让我们的项目运行失败,今天千锋老姜就带大家来看看是什么原因造成的这个错误问题。
我们在上图错误信息中,并没有发现错误地址的提醒,但有提示是xml问题,如下图所示:
对于以上这个问题,我们要简单了解下xml和utf-8字符编码到底是什么。
二. XML文档概述
XML是可扩展的标记语言(ExtensibleMarkup Language)缩写,主要用于提供数据表述格式,适用于不同应用程序间的数据交换,而且这种交换不以预先定义的一组数据结构为前提,增强了可扩展性。
XML在各个行业、各类应用中广泛使用,作为数据存储、传输交互等重要作用,具有很强的扩展性,并且跨平台、跨语言灵活度高。
三. 字符编码UTF-8
字符编码(Character encoding)也称字集码,UTF-8是针对Unicode的一种可变长度字符编码。
以中文为例,比如中文字符“哈”的unicode为“54c8”,对应的二进制表示为“01010100 11001000”,那么unicode是怎么转为utf8的呢?Unicode 与 UTF-8 编码有一个归纳的转换规则,如下所示:
Unicode Code UTF-8 Code 0000~007F 0xxxxxxx 0080~07FF 110xxxxx 10xxxxxx 0800~FFFF 1110xxxx 10xxxxxx 10xxxxxx 10000~10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
我们知道计算机只能读二进制,所以想让计算机显示出如中文等字符就需要使用字符编码。现在我们大致了解了这两方面的内容之后,再次回到错误问题上来。
根据上图错误信息的提示,我们会发现该异常是由于xml中的utf-8字符。
编码编译时导致的。而之所以会出现字符编码问题,只有非拉丁文的字符,即中文才会导致这样的编码错误。
四. 解决方式
现在既然知道了原因,那我们就可以对症下药进行解决了。
XML解析时,Java会将整个XML文档读入内存,构建一个DOM树来对各个节点(Node)进行操作,并使用递归方式进行遍历,XML出现字符编码的错误就是在递归遍历时读取到了中文字符才导致的问题。既然如此,我们就可以从以下2个方向进行解决。
解决方式1:
删除XML文件中所有的中文字符。
解决方式2:
设置idea开发工具的字符编码。
2.1 设置xml文件中的字符编码
2.2 设置idea工具里的字符编码
当我们设置完以上这些配置之后,就可以修复今天的这个异常问题了,现在你知道该怎么解决这个异常了吗?
扫码获取更多Java干货



