Проблема с китайской кодировкой при перечислении файлов - PullRequest
2 голосов
/ 11 марта 2010

Я запускаю приложение 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, поэтому я отлаживаю, просто чтобы найти, что значение в файлах [0] равно "??????".

Ответы [ 3 ]

1 голос
/ 11 марта 2010

Не уверен, что это хорошая практика. попробуйте установить кодировку при запуске jvm с помощью: java -Dfile.encoding = "" ...

0 голосов
/ 20 декабря 2010

Звучит так, как будто вы столкнулись с той же проблемой, что и http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4866151

Обычно это происходит, когда файл создается с одной кодировкой, а затем пытается прочитать с помощью другой.

0 голосов
/ 11 марта 2010

хорошо, вы можете попробовать это вместо

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

Это удаляет зависимости от имен файлов и работает напрямую с объектом File.

...