encoding/character 设置 Java 默认使用什么 BufferedReader?
What encoding/character set does Java use per default for BufferedReader?
当我们创建新的 BufferedReader
对象而不显式提供编码时,Java 默认使用什么 encoding/character 设置?
例如:
try (final BufferedReader reader = new BufferedReader(new FileReader("my_file.txt"))) {
reader.readLine(); // What encoding is used to read the file?
}
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);
}
哪个
Returns the default charset of this Java virtual machine.
The default charset is determined during virtual-machine startup and
typically depends upon the locale and charset of the underlying
operating system.
可以打印:
public static void main(String[] args) {
System.out.println(Charset.defaultCharset());
}
BufferedReader
不做任何解码。它是另一个 Reader
的包装器......可能会也可能不会解码。
FileReader
decodes using the JVM's default character encoding, as returned by Charset.defaultCharset()
javadoc 指出:
Convenience class for reading character files. The constructors of this class assume that the default character encoding and the default byte-buffer size are appropriate. To specify these values yourself, construct an InputStreamReader
on a FileInputStream
.
当我们创建新的 BufferedReader
对象而不显式提供编码时,Java 默认使用什么 encoding/character 设置?
例如:
try (final BufferedReader reader = new BufferedReader(new FileReader("my_file.txt"))) {
reader.readLine(); // What encoding is used to read the file?
}
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);
}
哪个
Returns the default charset of this Java virtual machine.
The default charset is determined during virtual-machine startup and typically depends upon the locale and charset of the underlying operating system.
可以打印:
public static void main(String[] args) {
System.out.println(Charset.defaultCharset());
}
BufferedReader
不做任何解码。它是另一个 Reader
的包装器......可能会也可能不会解码。
FileReader
decodes using the JVM's default character encoding, as returned by Charset.defaultCharset()
javadoc 指出:
Convenience class for reading character files. The constructors of this class assume that the default character encoding and the default byte-buffer size are appropriate. To specify these values yourself, construct an
InputStreamReader
on aFileInputStream
.