我通过以下方式读取了一个 UTF-8 文件:
br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), Charset.forName("UTF-8")));
我想知道String
调用后返回的字符集是什么br.readLine()
?
我电脑上的 Eclipse 使用“GBK”作为默认字符集。
我通过以下方式读取了一个 UTF-8 文件:
br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), Charset.forName("UTF-8")));
我想知道String
调用后返回的字符集是什么br.readLine()
?
我电脑上的 Eclipse 使用“GBK”作为默认字符集。
从技术上讲,文件是使用 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来完成。
Java 中的所有字符串都表示为 UTF-16。当您读入字符时,您指定的编码用于将它们转换为 UTF-16。当您写出它们时,您将选择另一种编码来写入,无论是隐式还是显式,字符将从 UTF-16 转换为您选择的任何字符。
它表示为 16 位 Unicode 的 Java 字符。