2017-02-21 8 views
4

Javaファイルのエンコードに問題があります。 Javaがファイル名に特殊文字を含むファイルを保存する

私はJavaプログラムが指定したファイル名のファイルとして、入力ストリームを保存します持って、コードスニペットは次のようである:

File out = new File(strFileName); 
Files.copy(inStream, out.toPath()); 

ファイル名は、のようないくつかの特殊文字が含まれていない限り、それはWindows上で正常に動作しますÖこれらの文字をファイル名に使用すると、保存されたファイルはWindows上で文字化けしたファイル名を表示します。

私はJVMオプション-Dfile.encoding=UTF-8を適用することでこの問題を修正できることを理解していますが、すべてのユーザーにJVMオプションを変更するように求めるのではなく、

プログラムのデバッグ中に、ファイル名の文字列が常に正しい文字を表示することがわかります。そのため、問題は内部エンコードではないと思います。

シーンの後ろに何が間違っているか説明してください。プログラムでこの問題を回避する方法はありますか?私は文字列からバイトを取得し、エンコーディングを変更しようとしましたが、動作しません。

ありがとうございました。 URLEncoder class仕事とを使用して

+0

は、実際に問題を解決するため、 '-Dfile.encoding'オプションを設定していますか?これは、ファイルから読み取るときに使用されるため、ファイル名自体では使用されないためです。どこからファイル名の文字列を取得しますか? – Thilo

+0

実際にはパラメータがファイル名のエンコード方法にも影響するようです:http://stackoverflow.com/questions/9196950/setting-file-name-encoding – Thilo

+0

@Thiloはいこの問題に対してはJVMオプションが有効です。この問題は、スウェーデンのファイル名でテストしたときに発見されました。 –

答えて

0

String name = URLEncoder.encode("fileName#", "UTF-8"); 
File output = new File(name); 
+0

本当ですか?そうは思わない。 – Thilo

+0

これは近似で、特殊文字を取得するためにデコーダ操作を再実行します –

+0

WindowsファイルシステムAPIがURLエンコーディングのための特別な処理方法を説明するリンクがありますか?また、この問題は、ファイル名のためにOSが認識しようとしている文字セットと一致する 'file.encoding'を設定するだけで、問題が解決できることを明確に述べていることにも注意してください。 – Thilo

関連する問題