【问题标题】:Found reliance on default encoding发现依赖默认编码
【发布时间】:2012-05-08 00:18:46
【问题描述】:

我从 FindBugs 得到以下错误,

在 MyClass.print(String): String.getBytes() 中发现对默认编码的依赖

方法

protected void print (String str) {
{
private OutputStream outStream = null;
.....
outStream.write(str.getBytes());
.......
}

请告诉我错误是什么?我们如何解决这个问题?

提前致谢

【问题讨论】:

    标签: findbugs


    【解决方案1】:

    将字符串编码为字节有不同的方法——字符集决定了编码。如果您没有指定字符集,例如在您对str.getBytes() 的调用中,它将使用系统默认值。

    FindBugs 会就此向您发出警告,因为您应该考虑要为输出使用什么编码。如果您正在写入文件,该文件的读者会期待什么?如果您可以为文件指定显式编码,这样您就不会以一种方式编写它并以另一种方式读取它,这是最安全的。

    要指定显式字符集,请使用str.getBytes(Charset.forName("UTF-8")),例如。 UTF-8 是一个不错的选择,因为它始终受到支持并且可以编码任何字符。

    例如,.properties 文件始终是 ISO 8859-1(即 Latin-1)。这已记录在案,因此对于使用什么编码没有歧义。

    【讨论】:

    • 作为Charset.forName("UFT-8") 的替代,Java 7 定义了StandardCharsets.UTF_8。见stackoverflow.com/a/16066990/152061
    • 如果你有相反的情况(字节 -> 字符串,而不是字符串 -> 字节),请使用 new String(bytes, StandardCharsets.UTF_8); 而不是 new String(bytes);
    猜你喜欢
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    相关资源
    最近更新 更多