java中BOM是什么_Java处理带BOM的文本情况是什么?
下面举个例子,针对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的文本情况是什么?相关推荐
- java中get接口示例_Java即时类| 带示例的get()方法
java中get接口示例 即时类的get()方法 (Instant Class get() method) get() method is available in java.time package ...
- java中get接口示例_Java LocalDateTime类| 带示例的get()方法
java中get接口示例 LocalDateTime类的get()方法 (LocalDateTime Class get() method) get() method is available in ...
- java中标签怎么用_Java中标签的使用
很多程序设计语言中有goto语句,goto语句的使用,使的程序变得难以读懂,尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用:Java没有goto.然而,在break和continue ...
- java中对象的生存期_Java中对象的生存周期
文章目录 JAVA对象的生存周期 1.创建阶段(Created) 为对象分配内存需要考虑的问题 2.应用阶段(In Use) 3.不可见阶段(Invisible) 4.不可达阶段(Unreachabl ...
- java中的基本数据类型_Java中的基本数据类型和引用数据类型
数据类型用于帮助确定变量可存放的一组值,以及可对这组特定值执行的操作.Java提供了在所有平台上都普遍支持的多种数据类型. 一.基本数据类型 byte:Java中最小的数据类型,在内存中占8位(bit ...
- java中审核订单流程图_Java 后端横扫阿里、滴滴、美团总结的面试经验!
这次面试的公司有一点点多,主要是因为毕业后前两份工作找的都很草率,这次换工作就想着,emm,毕业三年了,该找个工作好好沉淀几年了. 先说下这次面试的结果吧: 到 hr 面的:阿里.美团.滴滴.金山云. ...
- java中session的作用_java中session的工作原理是什么?和Cookies有何区别?
现在大家学习的东西和以前大不相同了,越来越多的人倾向于去学习高新技术以获得更好的发展.java是很多人的第一选择.java中的知识还是很多的,今天就来为大家介绍一下. 首先来说一下java中sessi ...
- java中数据类型的等级_Java 数据类型、变量
Java 数据类型 在 Java 中,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间. 整数类型 (byte.short.int.long) 1.Java 各整数类型有固 ...
- java中static的用法_Java类中static的用法
关于Java中static的使用有以下四种情况: 1.静态成员变量 被static修饰的成员变量,叫静态成员变量或类变量:没有被static修饰的变量,叫实例变量. 两者的区别是: 静态 ...
- java中如何定义一个_java中如何定义一个方法
java中如何定义一个方法 发布时间:2020-06-20 16:39:15 来源:亿速云 阅读:88 作者:Leah java中如何定义一个方法?相信很多新手小白还没学会这个技能,通过这篇文章的总结 ...
最新文章
- 034_ JDK的Enumeration接口
- Python基础教程:上下文管理器 context manager(with...as...)
- Mysql 客户端查询结果如何保存到本地而不是服务端?
- verilog or VHDL乒乓球游戏电路设计
- 块级元素(导航,图片,层)的水平和垂直居中
- 看得懂的外观设计模式 python3 实现
- js二级下拉被flash档住的解决办法
- SPAN Switched Port Analyzer 单臂路由
- python 操作excel表格
- 一文详解高精地图构建与SLAM感知优化建图策略
- 解读《美国国家BIM标准》 – BIM能力成熟度模型(二)
- 降维算法原理篇:主成分分析PCA、奇异值分解SVD、因子分析法FA、独立成分分析ICA等原理详推
- Mybatis学习小结
- 分享Visual Studio 2019专业版、企业版密匙
- linux 防火墙文件路径,linux防火墙设置
- 认识程序集:1. 程序集的生成
- python中exec是什么意思_Python中的exec()
- 大数据技术与原理 概述
- Mock工具介绍,为什么使用Mock?
- 现象级吃鸡类游戏软件调研
热门文章
- php模拟用户自动在qq空间发表文章的方法
- 18-Sqoop、DataX和Azkaban的介绍
- mysql5.7.26搭建MGR单主及多主模式
- 2794: [Poi2012]Cloakroom
- 男人成为富翁必备五大特质
- 关于java.io.FileNotFoundException: test.txt (系统找不到指定的文件。)的问题解决办法。(相对路径出错)
- VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard
- 解决“微信与此IPAD不兼容
- 2017年10月份上海拍牌 最后20秒发生了什么!
- 电影院订票选座小程序 电影小程序毕业设计 毕业论文 开题报告和效果图