【问题标题】:reading CSV file using java is working fine in test environment but its not behaving correctly in production environment使用 java 读取 CSV 文件在测试环境中工作正常,但在生产环境中运行不正确
【发布时间】:2015-04-20 18:27:45
【问题描述】:

我正在使用包含德语和法语内容的 CSV 文件。我正在使用文件阅读器通过 Java 读取这些文件。它在测试环境中工作正常,但在生产中,读取后 csv 文件内容在某些符号中发生了变化(我可以在日志中看到)。

【问题讨论】:

标签: java csv character-encoding filereader


【解决方案1】:

你不应该使用FileReader。它总是使用平台的默认字符集读取文件。

测试环境中的默认字符集与生产环境中的默认字符集不同。正是出于这个原因,您永远不应该依赖默认字符集。我假设您知道 CSV 文件的实际字符集是什么,因此请在您的代码中明确指定它:

String charset = "ISO-8859-1";
Reader csvReader = new BufferedReader(
    new InputStreamReader(new FileInputStream(fileName), charset));

可以在here 找到所有已知字符集的列表。该链接也出现在 Charset 类的文档中。

【讨论】:

  • 我还担心无法更改代码。
  • 能否在不更改代码的情况下提供一些其他配置?
  • 如果你有能力改变JVM的启动方式,你可以将file.encoding系统属性设置为CSV文件的字符集。这将有效地将 JVM 的默认字符集设置为底层平台字符集以外的字符集。请注意,其他代码可能依赖该默认字符集,因此您最终可能会破坏其他内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
  • 2022-11-02
  • 2021-09-12
  • 1970-01-01
相关资源
最近更新 更多