Странная проблема с кодировкой символов имени файла в Ubuntu / Java / Glassfish - PullRequest
8 голосов
/ 22 августа 2011

У меня есть приложение Java, развернутое на веб-сервере Glassfish на ПК с Ubuntu Server Edition.

Одна из служб, которые должно предоставить это приложение, - это смонтировать образ ISO в определенную папку и скопировать все содержимоеэта папка в другое место назначения.

Поскольку, как только мой метод Java нашел имя файла кириллицы, произошел сбой.Это имя файла отображается как «???????????????. Txt» в журналах приложений сервера.

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

Один парень из UbuntuForums (http://ubuntuforums.org/showthread.php?t=1813920) предложил мне преобразовать этот плохой файл с помощью утилиты "convmv", но этоВывод утилиты говорит, что этот файл уже был UTF-8.

После этого я создал тестовое приложение с теми же методами и запустил его на том же ПК, но так же, как «java Test $ arguments $».

И это сработало!

Простой метод System.out.println правильно отобразил имя файла и успешно скопировал файл проблемы в другую папку.

Этот факт не оставил меня равнодушнымвыбор, но требовать от Glassfish разрыва между моим классом, java и linux (хотя я не уверен, насколько это возможно).

Есть ли какие-либо специфические настройки кодировки символов в Glassfish, которые я мог бы исправить, чтобы исправить эту ошибкуили, может быть, я что-то упустил, и проблема на самом деле не существует?

Заранее спасибо!

Андрей

1 Ответ

1 голос
/ 10 января 2012

Попробуйте изменить Charset.defaultCharset(). См. Настройка кодировки символов Java по умолчанию? для получения более подробной информации.

Также см. Конфигурацию Glassfish, например

В sun-web.xml вы должны увидеть что-то вроде этого:

<locale-charset-info default-locale="">
<parameter-encoding default-charset="UTF-8"/>
</locale-charset-info>
...