Читайте текстовые файлы Unicode с Java - PullRequest
11 голосов
/ 11 июня 2009

Действительно простой вопрос. Мне нужно прочитать текстовый файл Unicode в программе Java.

Я привык использовать простой текст ASCII с комбинированным списком BufferedReader FileReader, который явно не работает: (

Я знаю, что могу прочитать строку «традиционным» способом, используя Buffered Reader, а затем преобразовать ее, используя что-то вроде:

temp = new String(temp.getBytes(), "UTF-16");

Но есть ли способ обернуть Reader в «конвертер»?

РЕДАКТИРОВАТЬ: файл начинается с FF FE

Ответы [ 7 ]

15 голосов
/ 11 июня 2009

вы не обернули бы Reader, вместо этого вы бы обернули поток, используя InputStreamReader. Затем вы можете обернуть это с вашим BufferedReader, который вы в настоящее время используете

BufferedReader in = new BufferedReader(new InputStreamReader(stream, encoding));
8 голосов
/ 11 июня 2009

Чек http://java.sun.com/j2se/1.4.2/docs/api/java/io/InputStreamReader.html

Я бы прочитал исходный файл с чем-то вроде:

Reader in = new InputStreamReader(new FileInputStream("file"), "UTF-8"));
7 голосов
/ 11 июня 2009

Некоторые заметки:

  • кодировка "UTF-16" может считывать файлы с кодировкой как в младшем, так и в старшем порядке, помеченные BOM ; см. здесь для списка кодировок Java 6; в явном виде не указано, какой порядок байтов будет использоваться при записи с использованием "UTF-16" - он выглядит как big-endian - поэтому вы можете использовать "UnicodeLittle" при сохранении данных
  • будьте осторожны при использовании методов кодирования / декодирования класса String, особенно с маркированным кодированием переменной ширины, например UTF-16 - используйте их только для целых данных
  • как уже говорили другие, часто лучше читать символьные данные, оборачивая InputStream в InputStreamReader ; Вы можете объединить свои входные данные в одну строку, используя StringBuilder или аналогичный буфер.
1 голос
/ 22 октября 2015

Я бы порекомендовал использовать UnicodeReader из API данных Google, см. этот ответ для аналогичного вопроса. Он автоматически обнаружит кодировку по метке порядка байтов (BOM).

Вы также можете рассмотреть BOMInputStream в Apache Commons IO, который в основном делает то же самое, но не охватывает все альтернативные версии BOM.

0 голосов
/ 02 ноября 2018

Мне просто нужно было добавить «UTF-8» к созданию InputStreamReader, и специальные символы можно было увидеть сразу.

InputStreamReader istreamReader = new InputStreamReader(inputStream,"UTF-8");
BufferedReader bufferedReader = new BufferedReader(istreamReader);
0 голосов
/ 13 июня 2018
String s = new String(Files.readAllBytes(Paths.get("file.txt")),"UTF-8");
0 голосов
/ 19 мая 2014
 Scanner scan = new Scanner(new File("C:\\Users\\daniel\\Desktop\\Corpus.txt"));
   while(scan.hasNext()){

   System.out.println(scan.nextLine());
    }
...