"本地字符集"是否与"要处理的文本数据的编码"相同?



Oracle Java文档在其字符流教程介绍中介绍了以下内容:

使用字符流代替字节流的程序会自动适应本地字符集,并为国际化做好准备——所有这些都不需要程序员付出额外的努力。(http://docs.oracle.com/javase/tutorial/essential/io/charstreams.html)

我的问题是关于"自动"一词在这种情况下的含义。在其他地方,文件警告

当文本文件中的数据编码与Java虚拟机的默认文件编码匹配时,它会自动转换为Unicode。。。。如果默认文件编码与要处理的文本数据的编码不同,则必须自己执行转换。在处理来自其他国家或计算平台的文本时,您可能需要这样做。(http://docs.oracle.com/javase/tutorial/i18n/text/convertintro.html)

第一个引号中的"本地字符集"是否类似于第二个引号的"要处理的文本数据的编码"?如果是这样的话,第二句话是否不是第一句话的夸口——除非你需要转换,否则你不需要进行任何转换?

在您链接的第一个教程的上下文中,我读到他们使用"本地字符集"来表示默认字符集。

例如:

inputStream = new FileReader("xanadu.txt");

他们正在创建一个FileReader,这不允许您指定Charset,因此将使用JVM的默认字符集:

  • FileReader(字符串)调用
  • InputStreamReader(InputStream),它调用
  • StreamDecoder.forInputStreamReader(InputStream,Object,String),最后一个参数为null
  • 因此Charset.defaultCharset()被用作字符集

如果你想使用显式字符集,你可以写:

inputStream = new InputStreamReader(new FileInputStream("xanadu.txt"), charset);

否。本地字符集是文件使用的字符集(字符值和相应代码的表),但默认的文本编码是JVM如何解释字符(将它们转换为字符代码)。它们相互联系,非常相似,但并不完全相同。

此外,它说它"自动"转换它,因为这是JVM的功能:它自动将包含代码的文本文件中的字符转换为机器可以读取的代码。

最新更新