码迷,mamicode.com
首页 > 编程语言 > 详细

Java读取Unicode文件(UTF-8等)时碰到的BOM首字符问题,及处理方法

时间:2015-07-31 15:01:19      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:java   unicode   utf-8   pom   首字符   

在Windows下用文本编辑器创建的文本文件,如果选择以UTF-8等Unicode格式保存,会在文件头(第一个字符)加入一个BOM标识。

这个标识在Java读取文件的时候,不会被去掉,而且String.trim()也无法删除。如果用readLine()读取第一行存进String里面,这个String的length会比看到的大1,而且第一个字符就是这个BOM。

这种情况会造成一些麻烦,比如在读取ini文件的时候,如果想判断第一行是不是以“[”开头就无法正确判断。

幸好,Java在读取Unicode文件的时候,会统一把BOM变成“\uFEFF”,这样的话,就可以自己手动解决了(判断后,用substring()或replace()去除掉这个BOM):
  if(line.startsWith("\uFEFF")){
   //line = line.substring(1);
   line = line.replace("\uFEFF", "");
  }

什么是BOM?
BOM = Byte Order Mark
BOM是Unicode规范中推荐的标记字节顺序的方法。比如说对于UTF-16,如果接收者收到的BOM是FEFF,表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明“我是UTF-8编码”。BOM的UTF-8编码是EF BB BF(用UltraEdit打开文本、切换到16进制可以看到)。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。

所有的BOM在C/C++/Java中都被处理为"\uFEFF",参考:http://www.fileformat.info/info/unicode/char/feff/index.htm

Wikipedia关于POM的说明介绍:

(原创文章,转载请注明转自Clement-Xu的博客)

版权声明:本文为原创文章,转载请注明转自Clement-Xu的csdn博客。

Java读取Unicode文件(UTF-8等)时碰到的BOM首字符问题,及处理方法

标签:java   unicode   utf-8   pom   首字符   

原文地址:http://blog.csdn.net/clementad/article/details/47168573

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!