2012-02-08 10 views
2

私は入力ファイルを定義されたエンコーディング(utf8)で持っています。このファイルから名前と内容(utf8)を入力ファイルから作ります。ファイル名のエンコーディングを設定する

私の問題は、特定のWindowsシステムで、作成されたファイルに正しい文字がないことです。これらのファイルの内容は完全に読み込み可能ですが、その名前は完全ではありません。 Ü.xmlの代わりに、ファイル名は├£.xmlです。

他のWindowsシステムでは、すべて正常に動作します。

ファイルコンテンツのエンコーディングはOutputStreamWriterの2番目の引数で設定できますが、ファイル名のエンコーディングはnew File(name)で設定できません。

ありがとうございました。

+0

'Ü.xml'を手動でそのWindowsシステムにコピーするとどうなりますか?どちらのシステムでもJVMのデフォルトのエンコーディングは何ですか? – Thomas

+0

手動でのコピーが機能します。 'System.getProperty(" file.encoding ")'は両方とも "Cp1252"です。 – stracktracer

+0

フィードバックありがとうございます。ファイルがJavaの実行によって正しく生成されるため、問題はメイヴン問題であることが判明しましたが、メイヴンがそれらをjarファイルにパッケージ化するときにのみ問題が存在します。参照:http://stackoverflow.com/questions/9258347/file-name-encoding-in-jar – stracktracer

答えて

2

2つの文字が1つのUTF-8マルチバイト文字üになるはずです。 WindowsはファイルエンコーディングとしてUTF-8を持っていないようです。そして、zipファイルの解凍など、そのシステムにUTF-8ファイルがコピーされました。

System.getProperty("file.encoding")は、プラットフォームエンコーディングを指定する必要があります。おそらく、リモートから想像できる、それはJava respでカバーされていないいくつかの奇妙なケースです。圧縮されたディレクトリのようなWindows、または非UTF-8対応のファイルシステムでフォーマットされた第2の外部ディスク。

+0

ありがとうございました。 file.encodingは両方のシステムで "Cp1252"です。 – stracktracer

+0

ファイルはどのように作成されましたか?手作業で欠陥がないはずです。 Javaでは ''ü.xml ''のように2つのエラーが発生する可能性があります。ソースコードをIDEで設定することができ、コンパイラはエンコーディングでもパラメータ化できます: 'javac -encoding Cp1252 ...'。 –

2

Javaはファイル名を文字列に変換するために「プラットフォームのデフォルト文字セット」を使用しています。標準APIを使用してその動作を変更する方法はありません。あなたは、一部システムでは、あなたがJVMを起動すると、デフォルトのエンコードを変更することができる場合があります。他のシステムで

java -Dfile.encoding=cp1252 package.ClassName 

ファイル名のエンコーディングに影響を与える唯一の方法は、システムのロケール設定を使用することです。ここで詳細を読むことができます:http://jonisalonen.com/2012/java-and-file-names-with-invalid-characters/

関連する問題