
Мы обрабатываем файлы, которые наши клиенты сгенерировали на своих локальных машинах Windows, которые используют набор символов CP-1252. Иногда при обработке одного из этих файлов в нашем бэкенде (работающем на CentOS) мы получаем ошибки времени выполнения (это бэкенд Java, так что RuntimeExceptions
). Если мы удаленно подключаемся к серверу, переименовываем файл (используя UTF-8) и перезапускаем его, файл обрабатывается совершенно нормально.
Есть ли способ «добавить» CP-1252 к доступным наборам символов CentOS, чтобы это прекратилось?
решение1
Ознакомьтесь с этим отчетом об ошибке от Oracle относительно поведения Javabug_id=4733494относящийся к "локали по умолчанию". Согласно этому отчету об ошибке (на самом деле Sun/Oracle говорит, что это поведение на самом деле не ошибка, а просто то, как была разработана Java), от Sun/Oracle:
В версиях JDK до 1.4 мы всегда принудительно устанавливали локаль "C" на набор символов ISO8859-1. В версиях 1.4 и более поздних мы поддерживаем локаль "C", которая требует ограничения до 7-битного ASCII.
Рекомендуется установить переменную окружения LC_ALL
в en_US.ISO8859-1
соответствии с локалью системы es_ES.ISO-8859-1
и т. д.
Добавление:
export LC_ALL="en_US.ISO-8859-1"
Командный файл, который запускает ваш Java-бэкенд, должен решить проблему.
Это также задокументировано в вопросе SO:https://stackoverflow.com/questions/5663709/how-to-fix-java-when-if-refused-to-open-a-file-with-special-charater-in-filename