2012-02-08 5 views
2

У меня есть входной файл в определенной кодировке (utf8), из которой я создаю разные файлы, чьи имена и содержимое (снова utf8) берутся из этого входного файла.Настройка кодировки имени файла

Моя проблема заключается в том, что одна конкретная система Windows, созданные файлы не имеют правильных символов. Содержимое этих файлов прекрасно читается, но их имена не являются. Вместо Ü.xml файл имеет имя ├£.xml.

В других системах Windows все работает нормально.

Кодирование содержимого файла может быть установлено в следующем аргументе OutputStreamWriter, но кодировка имени файла не может быть установлена ​​в new File(name).

Спасибо.

+0

Что произойдет, если вы вручную скопируете 'Ü.xml' в эту систему Windows? Какова стандартная кодировка JVM в обеих системах? – Thomas

+0

Копирование вручную работает. 'System.getProperty (" file.encoding ")' is "Cp1252" для обоих. – stracktracer

+0

Спасибо за отзыв. Оказывается, проблема связана с проблемой maven, так как файлы правильно генерируются при выполнении java, но только когда maven упаковывает их в банку, проблема там. См. Http://stackoverflow.com/questions/9258347/file-name-encoding-in-jar. – stracktracer

ответ

2

Видя два символа, в которых должен быть один многобайтовый символ UTF-8 ü. что Windows, похоже, не имеет UTF-8 в качестве кодировки файлов. И файл UTF-8 был скопирован на эту систему, например распаковка zip-файла.

System.getProperty("file.encoding") должен предоставить кодировку платформы. Может быть, возможно, что можно вообразить, это какой-то странный случай, не охватываемый Java resp. Windows, как сжатый каталог, или второй внешний диск, отформатированный файловой системой, не поддерживающей UTF-8.

+0

Благодарим вас за ответ. file.encoding - «Cp1252» в обеих системах. – stracktracer

+0

Как был создан файл? Вручную не должно быть ошибок. В Java, как «ü.xml», могут быть две ошибки: исходная кодировка может быть установлена ​​в среде 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/

Смежные вопросы