Как сделать так, чтобы InputStreamReader не работал с недопустимыми данными для кодирования?

У меня есть несколько байтов, которые должны быть в кодировке UTF-8, но которые могут содержать текст в кодировке ISO8859-1, если пользователю каким-то образом не удалось правильно использовать свой текстовый редактор.

Я прочитал файл с помощью InputStreamReader:

InputStreamReader reader = new InputStreamReader( 
    new FileInputStream(file), Charset.forName("UTF-8"));

Но каждый раз, когда пользователь использует умлауты, такие как «ä», которые недействительны в UTF-8 при сохранении в ISO8859-1, InputStreamReader не жалуется, а добавляет символы-заполнители.

Есть ли простой способ сделать это исключением при неверном вводе?


person Daniel    schedule 05.02.2013    source источник


Ответы (2)


Просто добавьте .newDecoder():

InputStreamReader reader = new InputStreamReader( 
    new FileInputStream(file), Charset.forName("UTF-8").newDecoder());
person Esailija    schedule 05.02.2013

person    schedule
comment
Спасибо! Не знал, что для этого есть API. - person Daniel; 06.02.2013