在OutputStream中找到"依赖于默认编码"

Vas*_*nth 4 findbugs

我们如何修复Reliance on default encodingfindBugs 的报告:

    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();
        }
Run Code Online (Sandbox Code Playgroud)

我正在使用写文件StreamWriter.

Coz*_*ara 8

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

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

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

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

  • 谢谢Cozzamara.!!!!!! 通过使用charset重构**OutputStreamWriter**解决了该问题.OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(new File(linkName)),Charset.forName("UTF-8")); (4认同)