4

Reliance on default encodingfindBugs によって報告された問題を修正するにはどうすればよいですか。

    StringBuffer printData = getPrintData(data);

    try {
            OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(new File(linkName)));
            out.write(printData.toString());
            out.flush();

            final FileInputStream f = new FileInputStream(new File(linkName));
            return f;
        } catch (final IOException ioe) {
            ioe.printStackTrace();
        }

を使用してファイルを書いていますStreamWriter

4

1 に答える 1

8

単一の引数で構築OutputStreamWriterします。これは、オペレーティング システムのデフォルトのエンコーディングを使用して、(Unicode である) Java 文字列をバイト ストリーム (ファイル出力) に変換することを意味し、ローカリゼーション設定に応じて、異なるマシンで異なる結果が得られる可能性があります。printData

たとえば、オブジェクトprintDataに日本語のテキストが含まれているとします。日本と米国の Windows でソフトウェアを実行すると、異なるデータがファイルに書き込まれます。米国のユーザーは、おそらくすべての象形文字をクエスチョン マーク (?) に置き換えますが、日本のユーザーは、元の日本語文字が保持された UTF-8 ファイルを使用している可能性があります。元のテキストに複数の言語が含まれている場合、結果はさらに予測不能になります。

それが何をするか、データがどこから来ているかによって、アプリケーションに受け入れられる場合と受け入れられない場合があります。それが警告の内容です。

アプリケーションが生成する必要があるファイル エンコーディングがわかっている場合は、OutputStreamWriter. 一方、マシンのデフォルト表現に変換する場合は、そのままにしておきます。

于 2013-01-17T09:21:46.987 に答える