Bazaprogram.ru

Новости из мира ПК
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java nio charset malformedinputexception

Все включено Charset, чтобы избежать » java.НИО.кодировка.MalformedInputException: длина входного сигнала = 1″?

Я создаю простую программу wordcount на Java, которая читает текстовые файлы каталога.

тем не менее, я продолжаю получать ошибку:

из этой строки кода:

Я знаю, что, вероятно, получу это, потому что я использовал Charset это не включало некоторые символы в текстовых файлах, некоторые из которых включали символы других языков. Но я хочу включить этих персонажей.

я позже узнал на JavaDocs что Charset является необязательным и используется только для более эффективного чтения файлов, поэтому я изменил код на:

но некоторые файлы все-таки бросить MalformedInputException . Не знаю почему.

мне было интересно, есть ли все включено Charset Это позволит мне читать текстовые файлы с различных типов символов?

8 ответов

вероятно, вы хотите иметь список поддерживаемых кодировок. Для каждого файла попробуйте каждую кодировку по очереди, возможно, начиная с UTF-8. Каждый раз, когда вы ловите MalformedInputException , попробуйте следующую кодировку.

создание BufferedReader из файлов.newBufferedReader

при запуске приложения может возникнуть следующее исключение:

отличается тем, что первый использует действие по умолчанию CharsetDecoder.

действие по умолчанию для ошибок с неправильным вводом и неприменимыми символами —отчет них.

в то время как последний использует замены.

ISO-8859-1 является все включено кодировка, в том смысле, что это гарантированно не бросать MalformedInputException. Так что это хорошо для отладки, даже если ваш вход не находится в этой кодировке. Итак: —

У меня были некоторые символы двойной правой кавычки/двойной левой кавычки на моем входе, и оба US-ASCII и UTF-8 бросили на них MalformedInputException, но ISO-8859-1 работал.

Я также столкнулся с этим исключением с сообщением об ошибке,

Читать еще:  Java lang throwable

и обнаружил, что при попытке использовать

для записи строки «orazg 54», приведенной из универсального типа в классе.

эта строка имеет длину 9, содержащую символы со следующими кодовыми точками:

111 Сто четырнадцать Девяносто семь Сто двадцать два Сто три Девять Пятьдесят три Пятьдесят два 10

однако, если BufferedWriter в классе заменяется на:

он может успешно написать эту строку без исключения. Кроме того, если я пишу ту же строку, созданную из символов, она все еще работает нормально.

ранее я никогда не сталкивался с каким-либо исключением при использовании первого BufferedWriter для записи любых строк. Это странная ошибка, которая возникает для BufferedWriter, созданного из java.НИО.файл.Файлы.newBufferedWriter(путь, параметры)

Я написал следующее, чтобы распечатать список результатов для стандартизации на основе доступных наборов символов. Обратите внимание, что он также сообщает вам, какая строка выходит из строя из номера строки на основе 0 в случае устранения неполадок, какой символ вызывает проблемы.

Ну, проблема в том, что Files.newBufferedReader(Path path) реализован следующим образом :

поэтому в принципе нет смысла указывать UTF-8 Если вы не хотите быть описательным в своем коде. Если вы хотите попробовать» более широкую » кодировку, вы можете попробовать с StandardCharsets.UTF_16 , но вы не можете быть на 100% уверены, что получите все возможные символы в любом случае.

попробуйте это.. у меня была такая же проблема, ниже реализация работала для меня

затем используйте Reader где угодно.

вы можете попробовать что-то вроде этого или просто скопировать и пропустить ниже кусок.

Ссылка на основную публикацию
Adblock
detector