2013-02-14 5 views
2

Я пытаюсь обновить приложение, работающее в основном на 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/

Это помогает чтение имен файлов, но я не нашел решение для создания новых файлов с правильным кодированным именем файла.

+1

Только что прошел тест с Java 7 (1.7.0_06-ea) на OS X 10.7.5 и создал файл с правильным именем, правильно отображаемым как в терминале, так и в Finder. Исходный файл сохраняется как UTF-8, никаких специальных переключателей ни в jvm, ни в компиляторе. Он проверяется в командной строке. – Monolo

+0

Спасибо за тестирование. Я использую 1.7.0_13 для OS X 10.8.2 и 10.7.5. Я попробую с более старой версией Java. Может быть, ошибка: -/ – chrise

+0

@Monolo вы правы. Также работает для меня, если я компилирую и запускаю из командной строки, странно. – chrise

ответ

2

Благодаря @Duralumin для правильного намека.

Из затмения, netbeans или связанного приложения с JRE (appbundle) используется java-двоичный код Java7. Вызов java из командной строки будет использовать двоичный файл под/usr/bin, который является файлом из Apple. По этой причине он работает из командной строки.

В затмении или NetBeans вы должны установить среду в конфигурации прогона, просто добавьте:

LC_TYPE = "UTF-8" 

В Appbundle я добавил

setenv("LC_CTYPE","UTF-8",1); 

уроженцу (Objective-C) JavaAppLauncher Я использую.

+0

Для записи Eclipse я думаю, что это должен быть LC_CTYPE = UTF-8 ", по крайней мере, это то, что сработало для меня. Теперь интересно, почему это не может быть по умолчанию на MacOS X? –