1

我通过以下方式读取了一个 UTF-8 文件:

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

我想知道String调用后返回的字符集是什么br.readLine()

我电脑上的 Eclipse 使用“GBK”作为默认字符集。

4

3 回答 3

3

从技术上讲,文件是使用 UTF-8 字符集读取的,正如您告诉的InputStreamReader那样。文件内容的底层字节使用 UTF-8 进行解释。该readLine()方法返回 a String,它将字符内部存储在 Java 自己的 UTF-16 字符集中。

之后发生的事情完全取决于你用 this 做什么String。如果您使用 a 将其写回文件Writer而不指定字符集,则将使用平台的默认值。如果您将其显示到标准输出,则将使用标准输出的默认字符集,这取决于运行时环境(命令控制台?IDE?等)。如果您将其保存在数据库中,则它取决于 JDBC 驱动程序配置和/或 DB 表编码。等等。

显然你正在将它打印到 Eclipse 控制台中的标准输出System.out.println()。在这种情况下,GBK 字符集将用于显示字符。这会使任何最初读取的不被 GBK 覆盖的 UTF-8 字符格式不正确。您需要将 Eclipse 配置为使用 UTF-8 作为文本文件编码。这可以通过Window > Preferences > General > Workspace > Text file encoding来完成。

于 2011-08-10T02:30:19.673 回答
1

Java 中的所有字符串都表示为 UTF-16。当您读入字符时,您指定的编码用于将它们转换为 UTF-16。当您写出它们时,您将选择另一种编码来写入,无论是隐式还是显式,字符将从 UTF-16 转换为您选择的任何字符。

于 2011-08-10T02:37:22.067 回答
0

它表示为 16 位 Unicode 的 Java 字符。

于 2011-08-10T02:31:00.677 回答