Проблемы с кодировкой в ​​файле Java

У меня есть строка в java, имя файла которой содержит умляуты. Файл правильно хранится на диске Win 7 Pro (умлауты и т.п. правильно отображаются в списке файлов проводника). Я также попытался сохранить имя файла в текстовый файл, а затем имя файла было правильно выведено с умлаутами. Но когда я использую метод exists() из файла, он говорит, что файл не существует. Если я попытаюсь использовать метод createNewFile(), он создаст файл типа ä.txt (первоначально ä.txt). Что может быть не так в моих настройках здесь? Я использую Tomcat 6 и Eclipse для запуска своего веб-приложения.


person newbie    schedule 08.06.2012    source источник
comment
Каковы настройки кодирования в свойствах проекта Eclipse?   -  person Radu Murzea    schedule 08.06.2012
comment
Имя файла жестко закодировано в вашем коде или вы его откуда-то прочитали?   -  person Robert    schedule 08.06.2012
comment
@Robert Он читается из http-запроса, но если я запишу эту строку в текстовый файл, она будет правильно напечатана, поэтому это не может быть связано с этим.   -  person newbie    schedule 08.06.2012
comment
@SoboLAN Я попробовал Cp1252 и UTF-8 по умолчанию, и это не решило мою проблему.   -  person newbie    schedule 08.06.2012
comment
Вы запустили java с свойством -Dfile.encoding=whatever?   -  person Bruno Grieder    schedule 08.06.2012


Ответы (1)


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

По умолчанию каждый экземпляр Java в качестве кодировки по умолчанию в Windows обычно имеет значение «Cp1252», в других системах обычно «UTF-8». Поэтому каждый метод, который читает или записывает строки из/в сеть или файловую систему, использует кодировку по умолчанию, если вы не используете версии метода, в которых кодировка указана явно.

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

Вывод: просмотрите свой код и убедитесь, что вы явно установили кодировку. Это особенно актуально для методов getBytes() String и везде, где у вас есть экземпляр Reader/Writer, подключенный к InputStream/OutpuStream.

person Robert    schedule 08.06.2012