Мне нужно построчно читать текстовый файл и применять к каждому из них несколько CharsetDecoders по порядку. На самом деле, я сначала пытаюсь декодировать строку, как если бы она была в кодировке UTF8, и возвращаться к однобайтовой кодировке, если UTF8 CharsetDecoder вызывает MalformedInputException.
Однако, если я использую InputStreamReader со значением по умолчанию или указанным набором символов, функция readLine автоматически заменяет на '?' все байты, которые он считает недопустимыми для указанной кодировки.
Я, наконец, закончил тем, что написал свою собственную функцию для чтения строк, которая читает из потока побайтно, ищет терминаторы строк и строит строки. Но таким образом это кажется ужасно медленным.
Есть ли способ заставить Java читать строки, не касаясь байтов?
UPDATE:
Я обнаружил, что есть наборы символов, в которых все 256 байтов действительны, два из них являются ограничителями строки.
Так что можно читать необработанный поток байтов line by line
.
Примеры таких кодировок:
IBM00858
IBM437
IBM775
IBM850
IBM852
IBM855
IBM860
IBM861
IBM862
IBM863
IBM865
ibm866
ISO-8859-1
ISO-8859-13
ISO-8859-15
ISO-8859-2
ISO-8859-4
ISO-8859-5
ISO-8859-9
KOI8-R
KOI8-U
окна-1256
Вопрос сейчас закрыт.