Что такое кодировка текста, возвращаемого InputStreamReader (InputStream in, Charset cs) - PullRequest
1 голос
/ 10 августа 2011

Я читаю файл UTF-8:

br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), Charset.forName("UTF-8")));

Я хотел бы знать, что такое кодировка возвращенного String после того, как я вызову br.readLine()?

Eclipse на моем компьютере использует "GBK" в качестве кодировки по умолчанию.

Ответы [ 3 ]

3 голосов
/ 10 августа 2011

Технически файл читается с использованием кодировки UTF-8, как вы сказали InputStreamReader для этого. Базовые байты содержимого файла интерпретируются с использованием UTF-8. Метод readLine() возвращает String, который хранит символы внутри собственной кодировки UTF-16 Java.

То, что произойдет после этого, полностью зависит от того, что вы делаете с этим String. Если вы записываете его обратно в файл, используя Writer без указания кодировки, то будет использоваться платформа по умолчанию. Если вы выводите его на стандартный вывод, то будет использоваться набор символов по умолчанию, который зависит от среды выполнения (командная консоль? IDE? И т. Д.). Если вы сохраняете его в базе данных, это зависит от конфигурации драйвера JDBC и / или кодировки таблицы БД. Etcetera.

Очевидно, вы печатаете его на стандартный вывод в консоли Eclipse по System.out.println(). В этом случае кодировка GBK будет использоваться для отображения символов. Это может привести к искажению любых первоначально прочитанных символов UTF-8, которые не охватываются GBK. Вам нужно настроить Eclipse для использования UTF-8 в качестве кодировки текстовых файлов. Это можно сделать с помощью Окно> Настройки> Общие> Рабочая область> Кодировка текстового файла .

1 голос
/ 10 августа 2011

Все строки в Java представлены как UTF-16 .Когда вы читаете символы, указанная вами кодировка используется для преобразования их в UTF-16.Когда вы их записываете, вы выбираете другую кодировку для явной или неявной записи, и символы будут преобразованы из UTF-16 во все, что вы выбрали.

0 голосов
/ 10 августа 2011

Представляется в виде символов Java, которые являются 16-битным Unicode.

...