【问题标题】:Found 'Reliance on default encoding' in OutputStream在 OutputStream 中找到“依赖默认编码”
【发布时间】:2013-01-17 07:32:46
【问题描述】:

我们如何修复 findBugs 报告的Reliance on default encoding

    StringBuffer printData = getPrintData(data);

    try {
            OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(new File(linkName)));
            out.write(printData.toString());
            out.flush();

            final FileInputStream f = new FileInputStream(new File(linkName));
            return f;
        } catch (final IOException ioe) {
            ioe.printStackTrace();
        }

我正在使用StreamWriter 编写文件。

【问题讨论】:

  • printdata 是一个 StringBuffer 对象

标签: findbugs


【解决方案1】:

你用single argument 构造OutputStreamWriter。这意味着它将使用操作系统的默认编码将来自printData(Unicode)的Java字符串转换为字节流(文件输出),并且您可能会在不同的机器上得到不同的结果,具体取决于它们的本地化设置。

例如,假设您的对象printData 包含日语文本。当人们在日本和美国的 Windows 上运行您的软件时,他们会得到不同的数据写入文件。美国用户可能会用问号 (?) 替换所有象形文字,而日本用户可能会使用保留原始日文字符的 UTF-8 文件。如果原文包含多种语言,结果将更加不可预测。

您的应用程序可能接受也可能不接受,具体取决于它的用途和数据的来源。这就是警告的内容。

如果您知道应用程序应该生成的文件编码,您可能希望在构造OutputStreamWriter 时明确选择它。另一方面,如果您希望将其翻译成机器的默认表示,请保持原样。

【讨论】:

  • 谢谢 Cozzamara .!!!!!!该问题已通过使用字符集重构 OutputStreamWriter 得到解决。 OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(new File(linkName)),Charset.forName("UTF-8"));
猜你喜欢
  • 2015-07-08
  • 2012-05-08
  • 1970-01-01
  • 2010-09-07
  • 2011-08-19
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多