65

FindBugs から以下のバグが発生しています。

MyClass.print(String): String.getBytes() のデフォルト エンコーディングへの依存が見つかりました。

方法

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

エラーの内容を教えてください。どうすればこれを解決できますか?

前もって感謝します

4

1 に答える 1

115

文字列をバイトとしてエンコードするにはさまざまな方法があります。文字セットによってそのエンコードが決定されます。への呼び出しのように文字セットを指定しない場合str.getBytes()、システムのデフォルトが使用されます。

FindBugs はこれについて警告しています。これは、出力に使用するエンコーディングを検討する必要があるためです。ファイルに書き込んでいる場合、そのファイルのリーダーは何を期待していますか? ファイルのエンコーディングを明示的に指定できれば、ある方法で書き込んで別の方法で読み取ることがなく、最も安全です。

明示的な文字セットを指定するにはstr.getBytes(Charset.forName("UTF-8"))、たとえば を使用します。UTF-8 は常にサポートされており、任意の文字をエンコードできるため、適切な選択です。

たとえば、.propertiesファイルは常に ISO 8859-1 (つまり、Latin-1) です。これは文書化されているため、使用するエンコーディングについてあいまいさはありません。

于 2012-05-22T16:11:54.220 に答える