去除utf-8编码的boms头|org.xmlpull.v1.XmlPullParserException: PI must not start with xml

在解析xml或者是其他文本文件时会遇到这个错误,本文先讲如何解决该异常,再讲解原理

1如何解决

首先奉上2个工具类,这两个工具类已经由牛人写好:http://koti.mbnet.fi/akini/java/unicodereader/

UnicodeReader类用来读取文本文件,它的作用是去除boms头,在代码中引用如下:
	BufferedReader bufferedReader = new BufferedReader(new UnicodeReader(new FileInputStream(file),"utf-8"));
UnicodeInputStream 类通常用来读取二进制文件(class will help you to autorecognize and skip BOMs. This will support UTF-8 as well.)
2深究原因
有关boms是啥参考这里:https://en.wikipedia.org/wiki/Byte_order_mark
在 UTF-8 文件中放置 BOM 主要是微软的习惯,微软在 UTF-8 中使用 BOM 是因为这样可以把 UTF-8 和 ASCII 等编码明确区分开,但这样的文件在 Windows 之外的操作系统里会带来问题。
其实针对文件本身也可以处理,在win下用使用ultraedit另存,选择“UTF-8 - 无BOM”如下图


其他文本编辑器大家可以自己研究研究。







你可能感兴趣的:(java异常,utf-8,bom)