Java - не может читать специальные символы из текстового файла - PullRequest
1 голос
/ 01 марта 2012

Я пишу программу, которая ищет слова в текстовом файле (скажем, B) в другом текстовом файле словаря (скажем, A), чтобы сравнить эффективность различных алгоритмов сортировки.

В любом случае, моя проблема в том, когда одиниз этих исходных текстовых файлов есть специальный символ, такой как «µ.»Прежде всего, чтобы сохранить текстовый файл с таким символом в Windows, блокнот говорит, что мне нужно изменить кодировку с ANSI на что-то другое, например UTF-8.

Моя программа падает, когда встречает строку сособый персонаж.В частности, в тот момент, когда это слово сравнивается со словом в другом текстовом файле словаря с помощью метода compareTo.Это происходит сбой с NullPointerException.

Я распечатал специальный символ, чтобы увидеть, что «µ» представлен как «Âµ», а странные символы всегда присутствуют в первой строке («ï» ¿»).

Я использую сканер для ввода файлов:

inputStream = new Scanner (new FileInputStream(args[0]));

Я также пробовал использовать FileReader

В общем, как бы я читал специальные символы или слова, содержащие специальныеперсонажи?И будут ли эти символы совместимы со встроенным методом compareT или мне нужно будет найти другой способ их заказать?

Ответы [ 2 ]

4 голосов
/ 01 марта 2012

Нет кодировки ANSI, есть только ASCII.Используйте Notepad ++ для создания правильных файлов в кодировке UTF-8.Откройте файл на Java с помощью reader , который принимает кодировку.

2 голосов
/ 01 марта 2012

Do

inputStream = new Scanner(new FileInputStream(args[0]), "UTF-8");

или

BufferedReader in = new BufferedReader(
        new InputStreamReader(new FileInputStream(args[0]), "UTF-8"));

InputStreams для двоичных байтов, Считыватели для символов с их кодировкой.

Кажется, перед текстом есть символ "BOM", пробел нулевой ширины, который служит для обозначения текста как UTF-8. Это могло быть удалено, но тогда Windows не распознает UTF-8. В сканере вы можете пропустить его.

...