项目中经常会从一些文本文件中读取数据进行业务处理,最近遇到一个问题,另外一个部门提供一个txt文本给我们进行业务处理,当我们使用字符流读取文本之后,处理时,发现第一行数据无法匹配,其他数据可以正常处理,第一反应是文本文件可能有问题,可能有一些不可见字符,于是把文本文件拷贝到linux上通过命令查看,发现第一行最前面多了一个<U+FEFF>,问题可能就出在这个地方了,简单测试如下:

1、新建一个txt文件,文件中第一行放一个词语"程序猿",然后保存为UTF-8编码:

2、从文本文件读取数据,然后比较:

     public static void main(String[] args) throws Exception {
String firstline=readFirstLine("wordFile.txt");
System.out.println(firstline.trim());
System.out.println("程序猿".equals(firstline)); } private static String readFirstLine(String filename)throws Exception{
try(
BufferedReader reader=new BufferedReader(new FileReader(new File(ClassLoader.getSystemResource(filename).getPath())));
){
String str=null;
while((str=reader.readLine())!=null){
return str;
}
}
return null;
}

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、用新文件覆盖之后,再次测试就正常了。

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

最新文章

  1. hibernate一对一主键单向关联
  2. C# 解析json
  3. iOS响应者链和事件传递机制
  4. redis 一二事 - 设置过期时间,以文件夹形式展示key显示缓存数据
  5. hiho一下 第九十七周 数论六&#183;模线性方程组
  6. coco2dx加载网络图片并保存
  7. Android Studio常见问题 -- AndroidManifest.xml 覆盖问题
  8. HTTP 错误 500.19 - Internal Server Error
  9. UVA_11468_Substring_(AC自动机+概率动态规划)
  10. [置顶] 深入理解android之IPC机制与Binder框架
  11. python20171113笔记
  12. Vue中的scoped及穿透方法
  13. 深入解析ThreadLocal 详解、实现原理、使用场景方法以及内存泄漏防范 多线程中篇(十七)
  14. vue学习笔记(WebStorm安装)
  15. 大数加法java版
  16. Python文件读写及网站显示
  17. AsyncTask GET请求
  18. USACO Section 2.1 The Castle 解题报告
  19. echarts - 特殊需求实现代码汇总之【柱图】篇
  20. xcode - 显示安装过的低版本模拟器

热门文章

  1. WCF入门一[WCF概述]
  2. 2037: [Sdoi2008]Sue的小球
  3. Eclipse 创建 XML 文件---Eclipse教程第12课
  4. Windows下如何解决git&#160;bash的默认home目录路径问题
  5. win10系统安装之GHOST还原(转+编辑)
  6. Linq语法和C#6.0
  7. 孤荷凌寒自学python第六十三天学习mongoDB的基本操作并进行简单封装2
  8. MySQL数据库有哪些特点
  9. Java进行身份证格式强校验(准)
  10. Mac平台重新设置MySQL的root密码