BeanIO - UnidentifiedRecordException при разборе файла UTF8

У меня проблема при разборе файла, закодированного с помощью 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);
}

что не решает проблему.

Что может быть причиной этой ошибки?


person Maraider    schedule 03.08.2015    source источник


Ответы (1)


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

person Joop Eggen    schedule 03.08.2015
comment
Попытался сохранить файл как UTF 8 без BOM, и это сработало. Но почему BeanReader не распознает последовательность спецификации в начале, когда я установил кодировку UTF 8? У меня также есть некоторые другие проблемы, связанные с этим, которые нельзя решить, изменив кодировку вручную в файле, поэтому меня больше интересовало, является ли это ошибкой в ​​BeanIO или есть ли другой способ решить это. - person Maraider; 03.08.2015
comment
Некоторые синтаксические анализаторы, т. е. синтаксические анализаторы XML, не распознают спецификацию как пробел. Здесь ожидается рекордный старт. И спецификация (помимо того, что это чистый лишний артефакт Unicode) является таким частным случаем, и даже невидимым для человеческого глаза. - person Joop Eggen; 03.08.2015