下面举个例子,针对UTF-8的文件BOM做个处理:

String xmla = StringFileToolkit。file2String(new File("D:\\projects\\mailpost\\src\\a。xml"),"UTF-8");

byte[] b = xmla。

getBytes("UTF-8");

String xml = new String(b,3,b。length-3,"UTF-8");

Document doc1 = DocumentHelper。parseText(xml);

Element e1 = (Element)doc1。

selectSingleNode("/ResponseData/Body/RetDesc");

Element e2 = (Element)doc1。selectSingleNode("/ResponseData/Head/RespID");

Element e3 = (Element)doc1。

selectSingleNode("/ResponseData/Body/RetCode");

Element e4 = (Element)doc1。selectSingleNode("/ResponseData/Body/RetDesc");

思路是:先按照UTF-8编码读取文件后,跳过前三个字符,重新构建一个新的字符串,然后用Dom4j解析处理,这样就不会报错了。

其他编码的方式处理思路类似,其实可以写一个通用的自动识别的BOM的工具,去掉BOM信息,返回字符串。

不过这个处理过程已经有牛人解决过了:http://koti。mbnet。fi/akini/java/unicodereader/

什么是BOM

BOM(byte-order mark),即字节顺序标记,它是插入到以UTF-

8、UTF16或UTF-32编码Unicode文件开头的特殊标记,用来识别Unicode文件的编码类型。

对于UTF-8来说,BOM并不是必须的,因为BOM用来标记多字节编码文件的编码类型和字节顺序(big-endian或little-endian)。

在绝大多数编辑器中都看不到BOM字符,因为它们能理解Unicode,去掉了读取器看不到的题头信息。

若要查看某个Unicode文件是否以BOM开头,可以使用十六进制编辑器。下表列出了不同编码所对应的BOM。

BOM

Encoding

EF BB BF

UTF-8

FE FF

UTF-16 (big-endian)

FF FE

UTF-16 (little-endian)

00 00 FE FF

UTF-32 (big-endian)

FF FE 00 00

UTF-32 (little-endian)

BOM的来历

为了识别 Unicode 文件,Microsoft 建议所有的 Unicode 文件应该以 ZERO WIDTH NOBREAK SPACE(U+FEFF)字符开头。

这作为一个“特征符”或“字节顺序标记(byte-order mark,BOM)”来识别文件中使用的编码和字节顺序。

不同的系统对BOM的支持

因为一些系统或程序不支持BOM,因此带有BOM的Unicode文件有时会带来一些问题。

1。JDK1。

5以及之前的Reader都不能处理带有BOM的UTF-8编码的文件,解析这种格式的xml文件时,会抛出异常:Content is not allowed in prolog。

2。Linux/UNIX 并没有使用 BOM,因为它会破坏现有的 ASCII 文件的语法约定。

不同的编辑工具对BOM的处理也各不相同。使用Windows自带的记事本将文件保存为UTF-8编码的时候,记事本会自动在文件开头插入BOM(虽然BOM对UTF-8来说并不是必须的),但是editplus就不会这样做。

BOM与XML

XML解析读取XML文档时,W3C定义了3条规则:

1。

如果文档中有BOM,就定义了文件编码;

2。如果文档中没有BOM,就查看XML声明中的编码属性;

3。如果上述两者都没有,就假定XML文档采用UTF-8编码。 以上是分析内容,仅供参考,谢谢!。

全部

java中BOM是什么_Java处理带BOM的文本情况是什么?相关推荐

  1. java中get接口示例_Java即时类| 带示例的get()方法

    java中get接口示例 即时类的get()方法 (Instant Class get() method) get() method is available in java.time package ...

  2. java中get接口示例_Java LocalDateTime类| 带示例的get()方法

    java中get接口示例 LocalDateTime类的get()方法 (LocalDateTime Class get() method) get() method is available in ...

  3. java中标签怎么用_Java中标签的使用

    很多程序设计语言中有goto语句,goto语句的使用,使的程序变得难以读懂,尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用:Java没有goto.然而,在break和continue ...

  4. java中对象的生存期_Java中对象的生存周期

    文章目录 JAVA对象的生存周期 1.创建阶段(Created) 为对象分配内存需要考虑的问题 2.应用阶段(In Use) 3.不可见阶段(Invisible) 4.不可达阶段(Unreachabl ...

  5. java中的基本数据类型_Java中的基本数据类型和引用数据类型

    数据类型用于帮助确定变量可存放的一组值,以及可对这组特定值执行的操作.Java提供了在所有平台上都普遍支持的多种数据类型. 一.基本数据类型 byte:Java中最小的数据类型,在内存中占8位(bit ...

  6. java中审核订单流程图_Java 后端横扫阿里、滴滴、美团总结的面试经验!

    这次面试的公司有一点点多,主要是因为毕业后前两份工作找的都很草率,这次换工作就想着,emm,毕业三年了,该找个工作好好沉淀几年了. 先说下这次面试的结果吧: 到 hr 面的:阿里.美团.滴滴.金山云. ...

  7. java中session的作用_java中session的工作原理是什么?和Cookies有何区别?

    现在大家学习的东西和以前大不相同了,越来越多的人倾向于去学习高新技术以获得更好的发展.java是很多人的第一选择.java中的知识还是很多的,今天就来为大家介绍一下. 首先来说一下java中sessi ...

  8. java中数据类型的等级_Java 数据类型、变量

    Java 数据类型 在 Java 中,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间. 整数类型 (byte.short.int.long) 1.Java 各整数类型有固 ...

  9. java中static的用法_Java类中static的用法

    关于Java中static的使用有以下四种情况: 1.静态成员变量        被static修饰的成员变量,叫静态成员变量或类变量:没有被static修饰的变量,叫实例变量. 两者的区别是: 静态 ...

  10. java中如何定义一个_java中如何定义一个方法

    java中如何定义一个方法 发布时间:2020-06-20 16:39:15 来源:亿速云 阅读:88 作者:Leah java中如何定义一个方法?相信很多新手小白还没学会这个技能,通过这篇文章的总结 ...

最新文章

  1. 034_ JDK的Enumeration接口
  2. Python基础教程:上下文管理器 context manager(with...as...)
  3. Mysql 客户端查询结果如何保存到本地而不是服务端?
  4. verilog or VHDL乒乓球游戏电路设计
  5. 块级元素(导航,图片,层)的水平和垂直居中
  6. 看得懂的外观设计模式 python3 实现
  7. js二级下拉被flash档住的解决办法
  8. SPAN Switched Port Analyzer 单臂路由
  9. python 操作excel表格
  10. 一文详解高精地图构建与SLAM感知优化建图策略
  11. 解读《美国国家BIM标准》 – BIM能力成熟度模型(二)
  12. 降维算法原理篇:主成分分析PCA、奇异值分解SVD、因子分析法FA、独立成分分析ICA等原理详推
  13. Mybatis学习小结
  14. 分享Visual Studio 2019专业版、企业版密匙
  15. linux 防火墙文件路径,linux防火墙设置
  16. 认识程序集:1. 程序集的生成
  17. python中exec是什么意思_Python中的exec()
  18. 大数据技术与原理 概述
  19. Mock工具介绍,为什么使用Mock?
  20. 现象级吃鸡类游戏软件调研

热门文章

  1. php模拟用户自动在qq空间发表文章的方法
  2. 18-Sqoop、DataX和Azkaban的介绍
  3. mysql5.7.26搭建MGR单主及多主模式
  4. 2794: [Poi2012]Cloakroom
  5. 男人成为富翁必备五大特质
  6. 关于java.io.FileNotFoundException: test.txt (系统找不到指定的文件。)的问题解决办法。(相对路径出错)
  7. VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard
  8. 解决“微信与此IPAD不兼容
  9. 2017年10月份上海拍牌 最后20秒发生了什么!
  10. 电影院订票选座小程序 电影小程序毕业设计 毕业论文 开题报告和效果图