什么是InputStreamReader返回的文本字符集(InputStream in,Charset cs)

时间:2011-08-10 02:22:18

标签: java character-encoding inputstreamreader

我通过以下方式阅读了UTF-8文件:

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

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

我的计算机上的Eclipse使用“GBK”作为默认字符集。

3 个答案:

答案 0 :(得分:3)

从技术上讲,文件是使用UTF-8的字符集读取的,正如你告诉InputStreamReader这样做的。使用UTF-8解释文件内容的基础字节。 readLine()方法返回String,它将字符内部存储在Java自己的UTF-16字符集中。

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

显然你是通过System.out.println()将它打印到Eclipse控制台中的stdout。在这种情况下,GBK字符集将用于显示字符。这会使GBK未涵盖的任何最初读取的UTF-8字符变形。您需要将Eclipse配置为使用UTF-8作为文本文件编码。这可以通过 Window>来完成。偏好>一般>工作区>文本文件编码

答案 1 :(得分:1)

Java中的所有字符串都是represented as UTF-16。当您读入字符时,您指定的编码用于将它们转换为UTF-16。当你把它们写出来时,你会选择另一种编码来隐式或明确地写入它,并且字符将从UTF-16转换为你选择的任何字符。

答案 2 :(得分:0)

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