2013-04-23 3 views
1

При чтении из файла первая строка, которую я прочитал, имеет странный символ (с использованием BufferedReader). Как удалить этот символ? Я знаю, что могу сделать это вручную, но я хочу сделать это правильно.Странный персонаж в начале файла?

enter image description here Picture (выход NetBeans)

+0

Как выглядит содержимое строки, которую вы читаете в файле? –

+3

Возможно, это файл UTF-8 с спецификацией ... Затем вы видите BOM.en.m.wikipedia.org/wiki/Byte_order_mark –

+0

Да, это UTF-8 с спецификацией. Так есть ли другой способ удалить его, но mannualy? –

ответ

0

Используя соответствующий код из ссылки, что ФП при условии, вот ответ на вопрос, который работает как задумано.

import java.io.*; 

public class UTF8ToAnsiUtils { 

    // FEFF because this is the Unicode char represented by the UTF-8 byte order mark (EF BB BF). 
    public static final String UTF8_BOM = "\uFEFF"; 

    public static void main(String args[]) { 
     try { 
      if (args.length != 2) { 
       System.out 
         .println("Usage : java UTF8ToAnsiUtils utf8file ansifile"); 
       System.exit(1); 
      } 

      boolean firstLine = true; 
      FileInputStream fis = new FileInputStream(args[0]); 
      BufferedReader r = new BufferedReader(new InputStreamReader(fis, 
        "UTF8")); 
      FileOutputStream fos = new FileOutputStream(args[1]); 
      Writer w = new BufferedWriter(new OutputStreamWriter(fos, "Cp1252")); 
      for (String s = ""; (s = r.readLine()) != null;) { 
       if (firstLine) { 
        s = UTF8ToAnsiUtils.removeUTF8BOM(s); 
        firstLine = false; 
       } 
       w.write(s + System.getProperty("line.separator")); 
       w.flush(); 
      } 

      w.close(); 
      r.close(); 
      System.exit(0); 
     } 

     catch (Exception e) { 
      e.printStackTrace(); 
      System.exit(1); 
     } 
    } 

    private static String removeUTF8BOM(String s) { 
     if (s.startsWith(UTF8_BOM)) { 
      s = s.substring(1); 
     } 
     return s; 
    } 
} 
Смежные вопросы