当我们创建新的BufferedReader
对象而不显式提供编码时,Java默认会使用哪种编码/字符集?
例如:
try (final BufferedReader reader = new BufferedReader(new FileReader("my_file.txt"))) {
reader.readLine(); // What encoding is used to read the file?
}
答案 0 :(得分:2)
BufferedReader
不执行任何解码。它是另一个Reader
的包装,它可能会也可能不会解码。
FileReader
使用由Charset.defaultCharset()
返回的JVM默认字符编码进行解码
javadoc指出:
用于读取字符文件的便捷类。 此类的构造函数假定默认字符编码和默认字节缓冲区大小合适。要自己指定这些值,请在
InputStreamReader
上构造一个FileInputStream
。
答案 1 :(得分:1)
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());
}