您现在的位置:首页 >> 基础 >> Java编程 >> 内容

Java处理带BOM(字节顺序标记)的文本 --Java学习网

时间:2016-7-17 6:48:03

  核心提示:说起BOM,这个问题还比较麻烦,因为BOM不可见,但用程序做不同编码文本处理时候却常常需要考虑到BOM的问题。在此之前,先对BOM做个简单认识。 先看看带BOM的文件: 源文件: ?xml versi...
   说起BOM,这个问题还比较麻烦,因为BOM不可见,但用程序做不同编码文本处理时候却常常需要考虑到BOM的问题。在此之前,先对BOM做个简单认识。
    先看看带BOM的文件:
    源文件:
    <?xml version="1.0" encoding="utf-8"?>
    <ResponseData>
    <Head>
    <Version>0100</Version>
    <RespID>634119501312903750</RespID>
    <ReqID>0</ReqID>
    </Head>
    <Body>
    <RetCode>999</RetCode>
    <RetDesc>未知错误</RetDesc>
    </Body>
    </ResponseData>
    16进制打开:


    下面举个例子,针对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)

Java免费学习   Java自学网 http://www.javalearns.com

关注微信号:javalearns   随时随地学Java

或扫一扫

随时随地学Java

作者:不详 来源:网络
    你是从哪里知道本网站的?
  • 网友介绍的
  • 百度搜索的
  • Google搜索的
  • 其它搜索过来的
  • 网址输错了进来的
  • 太忙了不记得了
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • java学习网(www.javalearns.com) © 2014 版权所有 All Rights Reserved.
  • Email:javalearns@163.com 站长QQ:1356121699 晋ICP备14003680号-3
  • java学习网部分内容来自网络或网友发布,如侵犯了您利益,请发邮件至:javalearns@126.com,我们尽快处理!
  • Java学习网
  • 网站统计
  • 晋公网安备 14042902000001号