Я пытаюсь обновить приложение, работающее в основном на Mac OSX, от Java6 до Java7. Случается, что файлы создаются с использованием специальных символов в имени файла, например. «föhn.txt» создаются как «f? hn.txt» с Java7.Mac OS X, Java 7: createNewFile кодировка имени файла
Если запустить этот пример сортировки на Mac
File file = new File("föhn.txt");
file.createNewFile();
- с Java6: föhn.txt
- с Java7: е hn.txt
Я знаю, что вы имитационные темы для этой темы:
и я судимый установить JVM аргумент: -Dfile.encoding=UTF8
, но это не имеет никакого эффекта на имя файла. Компилятор и источник установлены на utf-8. Я понятия не имею, почему это не работает с Java7 на OS X.
Обновление: Я пробовал пример в пределах eclipse и Netbeans, а последнее приложение в комплекте с jdk (appbundler).
Mac OS X использует разлагают формат UTF-8: File.listFiles() mangles unicode names with JDK 6 (Unicode Normalization issues)
И блог об этой теме: http://shlrm.org/blog/2012/10/04/osx-java-utf-8-oh-my/
Это помогает чтение имен файлов, но я не нашел решение для создания новых файлов с правильным кодированным именем файла.
Только что прошел тест с Java 7 (1.7.0_06-ea) на OS X 10.7.5 и создал файл с правильным именем, правильно отображаемым как в терминале, так и в Finder. Исходный файл сохраняется как UTF-8, никаких специальных переключателей ни в jvm, ни в компиляторе. Он проверяется в командной строке. – Monolo
Спасибо за тестирование. Я использую 1.7.0_13 для OS X 10.8.2 и 10.7.5. Я попробую с более старой версией Java. Может быть, ошибка: -/ – chrise
@Monolo вы правы. Также работает для меня, если я компилирую и запускаю из командной строки, странно. – chrise