Java读取Unicode文件(UTF-8等)时碰到的BOM首字符问题,及处理方法
2018-09-17 16:31
627 查看
转载:https://blog.csdn.net/clementad/article/details/47168573
2015-18-01修改:增加 apache commons io 处理方法。
在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", "");
- }
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>2.4</version>
- </dependency>
- BufferedReader reader = null;
- try {
- //reader = new BufferedReader(new FileReader(file));
- //使用BOMInputStream自动去除UTF-8中的BOM!!!
- reader = new BufferedReader(new InputStreamReader(new BOMInputStream(new FileInputStream(file))));
- String str = null;
- //一次读入一行(非空),直到读入null为文件结束
- while ((str = reader.readLine()) != null) {
- }
相关文章推荐
- Java读取Unicode文件(UTF-8等)时碰到的BOM首字符问题,及处理方法
- Java读取Unicode文件(UTF-8等)时碰到的BOM首字符问题,及处理方法
- Java读取Unicode文件(UTF-8等)时碰到的BOM首字符问题,及处理方法
- Java读取Unicode文件(UTF-8等)时碰到的BOM首字符问题,及处理方法
- Windows平台下Unicode文件(UTF-8等)头部插入BOM首字符问题及处理方法
- java读取UTF-8的txt文件发现开头的一个字符问题
- java读取UTF-8的txt文件发现开头的一个字符问题
- Java读取UTF-8格式txt文件第一行出现乱码——问号“?”及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法
- JAVA从UTF-8编码文件读取字符串时,前边有问号的问题
- Java读取配置文件的几种方法以及路径问题
- [Python爬虫] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题
- windows java读取utf-8编码文件时出现第一个字符为未知字符"?" 的解决方案
- Java对象序列化文件追加对象的问题,以及Java的读取多个对象的问题解决方法。
- Java读取UTF-8格式文件第一行出现乱码——问号“?”及解决 And Java读带有BOM的UTF-8文件乱码原因及解决方法
- J2ME中读取Unicode和UTF-8编码文件的方法
- Java采用readInt()方法直接读取特定的ZIP压缩文件出现了奇怪的问题
- ant编译java文件时报非法字符问题的解决方法
- java中读取excel文件中字符串乱码问题解决方法
- php读取淘宝数据包csv文件 unicode ucs-2 utf-16 中文乱码问题解决
- Java读取UTF-8格式txt文件第一行出现乱码——问号“?”及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法