メリーランド大学の FindBug プログラムを使用していますが、このエラーが発生します。
多数のプラットフォームで自分のコードをテストして動作するのに、なぜこのコードが悪い習慣なのか、改善するにはどうすればよいのでしょうか?
エンコーディング (文字列をバイトに変換する方法) が指定されていないことを示しています。
トルコで作成したテキスト ファイルをウズベキスタンでロードすると、異なる結果が得られる可能性があります。代わりに (たとえば)、指定されたエンコーディングを使用して自分で文字列をバイトに変換することにより、エンコーディングを直接指定できます (例についてはString.getBytesを参照してください)。
文字セットを指定する必要があります
OutputStreamWriterを使用できます
fileWriter = new OutputStreamWriter(new FileOutputStream(file),charset);
FileWriterドキュメントを参照してください。
デフォルトの文字エンコーディングに依存することは、悪い習慣と見なすことができます。
FileOutputStream
の代わりに を使用しFileWriter
ます。を使用してラップできますOutputStreamWriter
。これにより、コンストラクターでエンコーディングを渡すことができます。
そうしないと、Jeff が言ったように、データが正しく読み込まれません。
OutputStream fout = new FileOutputStream("test.txt");
OutputStream bout = new BufferedOutputStream(fout);
OutputStreamWriter out = new OutputStreamWriter(bout, "UTF-8");