FindBugsからバグを取得しています。
MyClass.print(String):String.getBytes()でデフォルトのエンコーディングへの依存が見つかりました
メソッド
protected void print (String str) {
{
private OutputStream outStream = null;
.....
outStream.write(str.getBytes());
.......
}
エラーを教えてください。どうすれば解決できますか?
前もって感謝します
文字列をバイトとしてエンコードするにはさまざまな方法があります。文字セットはそのエンコードを決定します。 str.getBytes()
への呼び出しのように文字セットを指定しない場合、システムのデフォルトが使用されます。
FindBugsはこのことについて警告しています。出力に使用するエンコーディングを検討する必要があるためです。ファイルに書き込む場合、そのファイルの読者は何を期待していますか?ファイルに明示的なエンコーディングを指定して、ある方法で書き込み、別の方法で読み取らないようにすることができれば、最も安全です。
明示的な文字セットを指定するには、たとえばstr.getBytes(Charset.forName("UTF-8"))
を使用します。 UTF-8は常にサポートされており、任意の文字をエンコードできるため、適切な選択です。
例えば、 .properties
ファイルは常にISO 8859-1(つまりLatin-1)です。それは文書化されているので、どのエンコーディングを使用するかについてあいまいさはありません。