2

でJavaアプリケーションを実行していますSolaris10 with Chinese。これで、ディレクトリに中国語のファイル名のファイルがいくつかあります。files = new File(dir).list()「dir」がその中国語ファイルを含む親ディレクトリである場合、結果のファイル名は?????files[0]として取得されます。(一部のジャンク文字)。

これで、プログラムのfile.encodingプロパティがすでにGBKに設定されており、これも設定されてCharset.isSupported("GBK")おり、trueが返されます。では、どこに問題があるのでしょうか。アイデアが足りなくなっています。

注:ファイル名をどこかに印刷したり、ファイルなどをコピーしたりしようとはしていません。私は単にそれにストリームを開いています、以下のようなものです:

files = new File(dir).list();
new FileInputStream(files[0]);

これでFileNotFoundExcpetionが得られるので、files[0]内の値が「??????」であることを確認するためにデバッグします。

4

3 に答える 3

1

それが良い習慣かどうかはわかりません。次を使用してjvmを起動するときに文字セットを設定してみてください: java -Dfile.encoding="" ...

于 2010-03-11T11:02:09.943 に答える
0

わかりました、代わりにこれを試してもらえますか

//String[] files = new File(dir).list(); 
File[] files = new File(dir).listFiles(); //use 'File' references instead.
FileInputStream fos = new FileInputStream(files[0]);

これにより、ファイル名の依存関係が削除され、File オブジェクトと直接連携します。

于 2010-03-11T11:18:01.187 に答える
0

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4866151と同じ問題が発生しているようです。

通常、これはファイルが 1 つのエンコーディングで作成され、別のエンコーディングで読み込もうとした場合に発生します。

于 2010-12-20T03:42:55.643 に答える