读取文本文件时<U+FEFF> 导致的奇怪问题
生活随笔
收集整理的這篇文章主要介紹了
读取文本文件时<U+FEFF> 导致的奇怪问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
項目中經常會從一些文本文件中讀取數據進行業務處理,最近遇到一個問題,另外一個部門提供一個txt文本給我們進行業務處理,當我們使用字符流讀取文本之后,處理時,發現第一行數據無法匹配,其他數據可以正常處理,第一反應是文本文件可能有問題,可能有一些不可見字符,于是把文本文件拷貝到linux上通過命令查看,發現第一行最前面多了一個<U+FEFF>,問題可能就出在這個地方了,簡單測試如下:
1、新建一個txt文件,文件中第一行放一個詞語"程序猿",然后保存為UTF-8編碼:
2、從文本文件讀取數據,然后比較:
1 public static void main(String[] args) throws Exception {
2 String firstline=readFirstLine("wordFile.txt");
3 System.out.println(firstline.trim());
4 System.out.println("程序猿".equals(firstline));
5
6 }
7
8 private static String readFirstLine(String filename)throws Exception{
9 try(
10 BufferedReader reader=new BufferedReader(new FileReader(new File(ClassLoader.getSystemResource(filename).getPath())));
11 ){
12 String str=null;
13 while((str=reader.readLine())!=null){
14 return str;
15 }
16 }
17 return null;
18 }
3、運行程序查看結果:
發現讀取第一行數據,進行空格處理之后,兩個詞語不相等。
4、將文件放到linux上查看(使用less命令,其他命令可能看不到效果):
發現詞語之前多了一個<U+FEFF> ,問題可能就出在這個地方
5、去掉多余的字符
1)In your terminal, open the file using vim: vim file_name 2) Remove all BOM characters: :set nobomb 3) Save the file: :wq
6、用新文件覆蓋之后,再次測試就正常了。
通過上面這幾步,一切都很清楚了吧。
總結
以上是生活随笔為你收集整理的读取文本文件时<U+FEFF> 导致的奇怪问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谈论Java原子变量和同步的效率 --
- 下一篇: IDA使用之旅(二)工具及窗口的使用