Какую кодировку / набор символов использует Java по умолчанию для BufferedReader? - PullRequest
0 голосов
/ 01 сентября 2018

Какую кодировку / набор символов использует Java по умолчанию при создании нового объекта BufferedReader без явного предоставления кодировки?

Например:

try (final BufferedReader reader = new BufferedReader(new FileReader("my_file.txt"))) {
  reader.readLine(); // What encoding is used to read the file?
}

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

BufferedReader не выполняет декодирование. Это обертка для другого Reader ..., который может или не может выполнять декодирование.

FileReader декодирует с использованием кодировки символов JVM по умолчанию, возвращаемой Charset.defaultCharset()

Javadoc утверждает:

Удобный класс для чтения символьных файлов. Конструкторы этого класса предполагают, что кодировка символов по умолчанию и размер байтового буфера по умолчанию являются подходящими. Чтобы указать эти значения самостоятельно, создайте InputStreamReader для FileInputStream.

0 голосов
/ 01 сентября 2018

FileReader - это InputStreamReader, который использует FileInputStream в качестве ввода, а InputStreamReader использует кодировку по умолчанию при построении без указанной кодировки.

В исходном коде jdk10 используется Charset.defaultCharset():

public static StreamDecoder forInputStreamReader(InputStream in,
                                                 Object lock,
                                                 String charsetName)
    throws UnsupportedEncodingException
{
    String csn = charsetName;
    if (csn == null)
        csn = Charset.defaultCharset().name(); // get default charset
    try {
        if (Charset.isSupported(csn))
            return new StreamDecoder(in, lock, Charset.forName(csn));
    } catch (IllegalCharsetNameException x) { }
    throw new UnsupportedEncodingException (csn);
}

который

Возвращает кодировку по умолчанию для этой виртуальной машины Java.

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

Вы можете распечатать его:

public static void main(String[] args) {
    System.out.println(Charset.defaultCharset());
}
...