【发布时间】:2012-12-02 06:20:18
【问题描述】:
我正在使用“FileInputStream”和“FileReader”从包含 unicode 字符的文件中读取数据。
当我将默认编码设置为“cp-1252”时,两者都在读取垃圾数据,当我将默认编码设置为 UTF-8 时,两者都可以正常读取。
- 是不是这两个都使用系统默认编码来读取数据?
- 那么如果字符流依赖于系统编码,那么使用字符流有什么好处呢。
-
还有什么办法:
BufferedReader fis = new BufferedReader(new InputStreamReader(new FileInputStream("some unicode file"),"UTF-8"));在默认编码不是 UTF-8 时正确读取数据。
【问题讨论】:
-
为什么手动设置编码对你来说不是一个好选择?
-
@Aleksander Gralak 我们总能做到,我想知道如何以编程方式做到这一点,即使默认编码不同。
-
但是您是以编程方式进行的。它是硬编码的,但它在源代码中。如果您想在运行时执行此操作,请从某种属性中获取字符串。对不起,我只是不明白你的问题是什么。
-
FileInputStream读取原始八位字节(字节)。它没有字符编码的概念。FileReader将数据从默认编码转码为 UTF-16 字符。默认编码是 1990 年代遗留下来的;应首选 Unicode 编码;使用不情愿地使用默认编码的类型/方法。
标签: java