demo4j在解析XML时,如果XML中遇到了bom头会报一些无厘头的错,以下贴出解决方案。
文本文件的头字节的标识:
00 00 FE FF |
UTF-32, big-endian |
FF FE 00 00 |
UTF-32, little-endian |
FE FF |
UTF-16, big-endian |
FF FE |
UTF-16, little-endian |
EF BB BF |
UTF-8 |
SAX解析中出现Content is not allowed in prolog.异常解决方法:
public Reader getReader(InputStream is) throws IOException,
UnsupportedEncodingException {
PushbackInputStream pis = new PushbackInputStream(is, 1024);
String bomEncoding = getBOMEncoding(pis);
System.out.println(bomEncoding);
Reader input = null;
if (bomEncoding == null) {
input = new BufferedReader(new InputStreamReader(pis, "UTF8"));
}
else {
input = new BufferedReader(new InputStreamReader(pis, bomEncoding));
}
return input;
}
protected String getBOMEncoding(PushbackInputStream is) throws IOException {
String encoding = null;
int[] bytes = new int[3];
bytes[0] = is.read();
bytes[1] = is.read();
bytes[2] = is.read();
if (bytes[0] == 0xFE && bytes[1] == 0xFF) {
encoding = "UTF_16BE";
is.unread(bytes[2]);
}
else if (bytes[0] == 0xFF && bytes[1] == 0xFE) {
encoding = "UTF_16LE";
is.unread(bytes[2]);
}
else if (bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) {
encoding = "UTF8";
}
else {
for (int i = bytes.length - 1; i >= 0; i--) {
is.unread(bytes[i]);
}
}
return encoding;
}
分享到:
相关推荐
**什么是BOM头** BOM(Byte Order Mark)头,也称为字节顺序标记,是Unicode编码格式的一个特殊字符。它通常出现在UTF-8、UTF-16和UTF-32编码的文件开头,用于标识文件所使用的字符编码类型。在UTF-8编码中,BOM头...
通常,BOM头是可选的,对于大多数现代文本编辑器和解析器来说,它们能够识别没有BOM头的UTF-8文件。但是一些较旧或者设计不完善的程序可能无法处理这个额外的字节序列,从而导致显示异常,如出现乱码、空格或者无法...
标题"去除BOM文件头工具"指的是一个专门设计用来处理这个问题的小型实用程序,它可以帮助用户批量删除UTF-8文件的BOM头。BOM头虽然对解析UTF-8编码的文本文件至关重要,但在某些情况下,如代码编辑器或版本控制系统...
**什么是BOM头** BOM(Byte Order Mark)在Unicode编码中是一个特殊的字符,用于标识文件的字符编码格式。在UTF-8编码中,BOM头由三个字节组成(0xEF, 0xBB, 0xBF),它并不是必须的,但有时候会被添加到文件的开头...
"去BOM头工具"就是针对这种情况设计的,它的主要功能是去除Eclipse中使用UTF-8带BOM编码格式的文件开头的BOM头。Eclipse是一个广泛使用的Java集成开发环境(IDE),它允许开发者配置项目的编码格式。在默认情况下,...
在实际开发中,有BOM头的UTF-8文件可能会影响代码的正确解析,比如在某些编程语言中,BOM头可能导致文件读取的异常,或者在某些编辑器中,BOM头可能会被误识别为文本的一部分。此外,一些版本控制系统(如Git)在...
Java处理带有BOM头的XML文件是一个常见的编程挑战,特别是在使用DOM4J解析XML文档时。BOM(Byte Order Mark)是Unicode字符集中的一个特殊字符,用于标识文本的编码方式。在UTF-16编码中,BOM通常出现在文件的开头,...
在Java编程中,处理文本文件时,我们可能会遇到BOM(Byte Order Mark)头信息的问题。BOM是Unicode编码格式中的一个特殊字符,用于标识文件的编码类型,常见于UTF-8、UTF-16和UTF-32等格式。在某些情况下,如读取或...
这个工具整合了之前的去BOM工具和所需的DLL(动态链接库)文件,使得用户可以方便地处理含有BOM头的UTF-8文件。DLL文件通常包含了一组可供其他程序调用的函数或服务,这里可能是为了实现去BOM功能的底层逻辑。 使用...
去除文件中的BOM头信息. 一些文档工具可以打开再保存为无bom格式,但文件太多就很费力,此工具类可以直接运行,直接输入你要修改的文件夹路径即可,可自由调整文件夹深度,进行子级文件夹读取
标题"去除所有页面BOM头"指的是在网页开发过程中,为了解决因BOM头导致的视觉异常或程序错误,我们需要从文件中移除这个额外的字符。 描述中的"清除ajax返回数据出现红点问题"进一步指出了BOM头可能引发的具体问题...
通常在UTF-8编码的文件中,如果存在BOM头,那么文件的开头会有三个不可见的字符:\xEF\xBB\xBF。虽然大多数现代编辑器能够正确处理BOM头,但在某些情况下,例如在PHP中包含或处理这些文件时,BOM头可能会引起错误,...
选择要遍历的文件夹,输入相应的文件格式,程序会遍历此文件夹下所有相应格式文件,包括子文件夹下的文件删除其BOM头 勾选ANSI转为UTF-8,则会将相应格式但编码为GB2312,GBK,GB18030的文件转为无BOM的UTF-8文件 请...
在UTF-8编码中,BOM头由三个字节(0xEF, 0xBB, 0xBF)组成,它在文件的最开始位置出现。虽然这个标记对于大多数程序是透明的,但在某些情况下,比如在浏览器中直接输出含有BOM头的PHP脚本时,可能会导致预想不到的...
自动识别有BOM头的文件,批量去除BOM头
3. **使用第三方工具**:如`dos2unix`命令行工具,或者专门的去BOM工具。 **四、防止BOM头的生成** 1. **选择正确的编码设置**:在创建或保存文件时,选择“UTF-8无BOM”格式。 2. **配置编辑器**:在IDE或编辑器...
BOM的主要目的是帮助解析器确定文件的字节顺序,但对于像Java这样的语言,BOM头可能会引起编译错误,因为它们不期望源代码文件的开头有额外的字符。 在IntelliJ IDEA(简称IDEA)这样的集成开发环境中,如果Java源...
在C#编程中,有时我们需要在写入UTF-8文件时添加这个BOM头,以确保其他程序或系统能正确识别文件的编码。 在C#中,我们通常使用`System.IO.StreamWriter`类来写入文本文件。默认情况下,`StreamWriter`创建的UTF-8...
php 删除bom头工具 获取路径删除bom头
bom 头 清除 脚本 清除前请做好备份。 如因清除出现站点无法运行,本人概不负责。