如何在InputStream中处理BOM

时间:2011-05-23 08:31:41

标签: java utf-8 character-encoding inputstream byte-order-mark

  

可能重复:
  Byte order mark screws up file reading in Java

public Collection<String> getLines(String path) throws SftpException
{
   BufferedReader reader = null;
   try
   {
      reader = new BufferedReader(new InputStreamReader(get(path)));

      Collection<String> result = new ArrayList<String>();
      String line;
      while((line = reader.readLine()) != null)
      {
         result.add(line);
      }
      return result;
   }
   catch (IOException e)
   {
      throw new SftpException("Could not get lines from '"+path+"'.", e);
   }
   finally
   {
      if(reader != null)
         try
         {
            reader.close();
         }
         catch (IOException e)
         {
            throw new SftpException("Failed to close stream", e);
         }
   }
}

我使用上面的方法获取位于SFTP服务器上的文件中的所有行。 get(path)方法将文件内容作为InputStream返回。在我的特定情况下,该文件是具有多个分组订单的CSV。要检查某行是订单还是新组的标题,我会line.startsWith("HDR")

我的问题是我突然发现我的代码跳过了第一个标题行。当我进入调试器时,我发现我的集合中的第一行实际上在HDR部分之前有一些奇怪的字符。我怀疑它是UTF-8 BOM或类似的东西。那么,我该如何处理呢?如何正确读取UTF-8文件?有没有办法可以检查它是否真的是UTF-8文件?


更新:在Byte order mark screws up file reading in Java找到解决方案,关闭此内容:)

0 个答案:

没有答案