zoukankan      html  css  js  c++  java
  • 读取文本文件时<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、用新文件覆盖之后,再次测试就正常了。

    通过上面这几步,一切都很清楚了吧。

  • 相关阅读:
    性能优化
    几种跨域处理
    重温前端基础之-数组去重
    移动端常遇到的问题
    WPF 应用
    WPF 应用
    WPF 应用
    C# 应用
    WPF 应用
    C# 应用
  • 原文地址:https://www.cnblogs.com/jessezeng/p/6729690.html
Copyright © 2011-2022 走看看