【问题标题】:Reading Unicode characters in Java在 Java 中读取 Unicode 字符
【发布时间】:2012-12-02 06:20:18
【问题描述】:

我正在使用“FileInputStream”和“FileReader”从包含 unicode 字符的文件中读取数据。

当我将默认编码设置为“cp-1252”时,两者都在读取垃圾数据,当我将默认编码设置为 UTF-8 时,两者都可以正常读取。

  1. 是不是这两个都使用系统默认编码来读取数据?
  2. 那么如果字符流依赖于系统编码,那么使用字符流有什么好处呢。
  3. 还有什么办法:

     BufferedReader fis = new BufferedReader(new InputStreamReader(new FileInputStream("some unicode file"),"UTF-8"));
    

    在默认编码不是 UTF-8 时正确读取数据。

【问题讨论】:

  • 为什么手动设置编码对你来说不是一个好选择?
  • @Aleksander Gralak 我们总能做到,我想知道如何以编程方式做到这一点,即使默认编码不同。
  • 但是您是以编程方式进行的。它是硬编码的,但它在源代码中。如果您想在运行时执行此操作,请从某种属性中获取字符串。对不起,我只是不明白你的问题是什么。
  • FileInputStream 读取原始八位字节(字节)。它没有字符编码的概念。 FileReader 将数据从默认编码转码为 UTF-16 字符。默认编码是 1990 年代遗留下来的;应首选 Unicode 编码;使用不情愿地使用默认编码的类型/方法。

标签: java


【解决方案1】:

FileReader 和 FileWriter 恕我直言应该被弃用。 使用

new InputStreamReader(new FileInputStream(file), "UTF-8")

差不多。

这里也有一个没有编码参数的重载版本,使用默认的平台编码:System.getProperty("file.encoding")

【讨论】:

  • 为什么要弃用 Readers 和 Writers?他们应该读/写字符数据,正是这种情况。
  • 只有文件版本,因为它们没有带有字符集参数的重载版本。
猜你喜欢
  • 1970-01-01
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 2013-03-09
相关资源
最近更新 更多