2015-08-03 3 views
0

У меня проблема при разборе файла, закодированного с помощью UTF8.BeanIO - UnidentifiedRecordException при разборе файла UTF8

У меня есть два файла, которые полностью идентичны, за исключением их кодирования. (Я просто просто скопировал файл и сохранил его с помощью UTF8, поэтому содержимое идентично). Один кодируется с использованием ANSI, другой - с UTF8. Файл, который кодируется с ANSI является успешно разобран, а другой файл вызывает BeanIO бросить UnidentifiedRecordException при вызове метода BeanReader.read():

org.beanio.UnidentifiedRecordException: Unidentified record at line 1 

Я попытался решить эту проблему, явно задать кодировку UTF8 используя этот код:

public static BeanReader getBeanReader(File file, StreamBuilder builder) { 
    StreamFactory factory = StreamFactory.newInstance(); 
    factory.define(builder); 
    InputStream iStream; 
    try { 
     iStream = new FileInputStream(file); 
    } catch (FileNotFoundException e) { 
     throw new CustomException("Could not create BeanReader, file not found", e); 
    } 
    Reader reader = new InputStreamReader(iStream, StandardCharsets.UTF_8); 
    return factory.createReader("reader", reader); 
} 

который не решает проблему.

В чем причина этой ошибки?

ответ

0

Как утверждается, первая строка ошибочна, сохранили ли вы UTF-8 без спецификации (это печально известное пространство с нулевой шириной при старте файла)?

+0

Пытался сохранить файл как UTF 8 без спецификации, и это сработало. Но почему BeanReader не распознает последовательность BOM в начале, когда я устанавливаю кодировку UTF 8? У меня есть и другие проблемы, связанные с этим, которые не могут быть решены путем изменения кодировки вручную в файле, поэтому меня больше интересовало, является ли это ошибкой в ​​BeanIO или есть другой способ решить эту проблему. – Maraider

+0

Некоторые парсеры, т. Е. Синтаксические анализаторы XML, не распознают спецификацию как пробел. Здесь ожидается «запись». И спецификация (помимо того, что является чистым ненужным артефактом Юникода) является таким особым случаем и даже невидимым для человеческого глаза. –

Смежные вопросы