首页 | 软件中心 | Designand Inspiration
读库教程网 > 网络教程 > 技术开发 > Java > Java处理带BOM的文本

Java处理带BOM的文本

添加:2010年7月22日


  说起BOM,这个疑问还比拟费事,由于BOM不可见,但用顺序做不一样编码文本处置时分却经常须要思索到BOM的疑问。在此之前,先对BOM做个容易见解。
  先看看带BOM的文件:
  源文件:
Java处理带BOM的文本[多图]图片1
  16进制翻开:
Java处理带BOM的文本[多图]图片2
  检查原图(大图)
  下面举个例子,针对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编码。
  出处http://lavasoft.blog.51cto.com/62575/331095

读库教程网文章由网络收集后整理发布,文章发布人拥有该内容的所有权力及责任!

如果你喜欢这页,可以按Ctrl+D收藏起来。

相关内容
上一个内容:甲骨文收购Sun后Java和MySQL命运变好
下一个内容:Has no
相关评论
公益广告
精彩推荐
友情链接: 百分百青年 | 烛光信息网 | 夏布新网 | 新育互联网
管理员:QQ:27038219, E-mail:27038219@qq.com今日更新
读库教程网所有文章从网络收集所发布,文章发布人拥有该内容的所有权力及责任,转载时请注明出处!
Template designed by www.dkuu.com. Optimized for 1024x768 to Firefox,Opera and MS-IE6/IE7.