发现依赖于默认编码

时间:2012-04-27 08:37:45

标签: findbugs

我从FindBugs获得了以下错误,

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

方式

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

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

提前致谢

1 个答案:

答案 0 :(得分:82)

将字符串编码为字节有不同的方法 - 字符集确定编码。如果您没有指定字符集,就像调用str.getBytes()一样,它会使用系统默认值。

FindBugs会警告您这一点,因为您应该考虑要用于输出的编码。如果你正在写一个文件,那个文件的读者会期待什么?如果你可以为文件指定一个显式编码是最安全的,所以你不能用一种方式写它并以另一种方式读它。

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

例如,.properties文件始终是ISO 8859-1(即Latin-1)。这是记录在案的,所以对于要使用的编码没有任何歧义。