Мы обрабатываем файлы, сгенерированные нашими клиентами на своих локальных компьютерах Windows, которые используют набор символов CP-1252. Иногда при обработке одного из этих файлов в нашем бэкэнде (работающем в CentOS) мы получаем ошибки времени выполнения (это бэкэнд Java, поэтому RuntimeExceptions). Если мы удаленно подключаемся к серверу, переименовываем файл (используя UTF-8) и перезапускаем его, файл обрабатывается отлично.

Есть ли способ "добавить" CP-1252 в доступные наборы символов CentOS, чтобы это перестало происходить?

1 ответ1

1

Посмотрите этот отчет об ошибках от Oracle о поведении Java bug_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- имя файла

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .