UTF-8 в ResourceBundle Java: решение для Google App Engine

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для использования кодировки UTF-8 в файлах свойств рекомендуется написать собственную реализацию ResourceBundle.Control и переопределить в ней метод newBundle. Этот метод должен создавать объект PropertyResourceBundle, используя InputStreamReader с указанной кодировкой UTF-8.

Пример кода:

Java
Скопировать код
public class UTF8Control extends ResourceBundle.Control {
    @Override
    public ResourceBundle newBundle(String baseName, Locale locale, String format,
                                    ClassLoader loader, boolean reload)
            throws IOException {
        String bundleName = toBundleName(baseName, locale);
        String resourceName = toResourceName(bundleName, "properties");

        try (InputStream is = loader.getResourceAsStream(resourceName);
             Reader reader = new InputStreamReader(is, StandardCharsets.UTF_8)) {
            return new PropertyResourceBundle(reader);
        }
    }
}

ResourceBundle bundle = ResourceBundle.getBundle("BundleName", new UTF8Control());

Созданный класс UTF8Control гарантирует корректную загрузку файлов с учётом кодировки UTF-8, что позволяет избежать проблем, связанных с неправильной кодировкой.

Кинга Идем в IT: пошаговый план для смены профессии

Стратегии работы с кодировками свойств в различных IDE

Кодировка в IntelliJ IDEA

Для выбора кодировки UTF-8 в файлах свойств в IntelliJ IDEA нужно зайти в FileSettingsEditorFile Encodings и в соответствующих полях установить как Глобальную Кодировку, так и Кодировку Проекта в UTF-8. Данная настройка позволит IDE автоматически конвертировать символы, не входящие в ASCII, в формат \uXXXX.

Обходное решение для Eclipse

Поскольку Eclipse по умолчанию работает с кодировкой ISO-8859-1, можно либо изменить настройки кодировки рабочей области на UTF-8, либо использовать утилиту native2ascii для конвертации файлов в Unicode.

Универсальное решение: использование текстовых редакторов

Если работа с IDE вызывает трудности, вы можете пользоваться универсальными текстовыми редакторами, как, например, Sublime Text или Visual Studio Code, которые умеют корректно работать с различными кодировками.

Соблюдение совместимости со старыми версиями Java

Хорошие новости для пользователей Java 9 и новее

Начиная с версии Java 9, ResourceBundle поддерживает кодировку UTF-8 по умолчанию, что позволяет избежать проблем с кодировкой файлов свойств.

Обходное решение для старых версий Java

В версиях Java до 8-й необходимо сохранять файлы в кодировке ISO-8859-1, либо использовать описанный ранее UTF8Control. Также возможно применять экранированные коды вида \uXXXX для символов, которые не входят в диапазон кодировки ISO.

Методика работы с InputStreamReader

Если текст отображается некорректно, попробуйте загрузить файлы свойств с использованием InputStreamReader, настроенного на кодировку UTF-8.

Обеспечение совместимости с существующим окружением

Google App Engine: что стоит учесть

При работе на платформе Google App Engine (GAE) необходимо учитывать установленные ограничения на работу с кодировками ресурсов.

Настройки IDE: друг или враг?

Проблемы с кодировкой зачастую возникают из-за неправильной настройки среды разработки. Изучите руководство по работе с вашей IDE и настройте её таким образом, чтобы избежать ненужных ошибок и проблем.

Инструменты на помощь: native2ascii

Если проблемы с кодировкой UTF-8 всё ещё актуальны, попробуйте использовать утилиту native2ascii для конвертации файлов свойств в ISO-8859-1. Это поможет избежать возможных проблем при интерпретации символов.

Эффективные стратегии работы с кодировкой UTF-8

Расширенная загрузка свойств

До появления версии Java 9 рекомендуется использовать InputStream и PropertyResourceBundle для гибкого управления кодировками свойств.

Умелый приём для конвертации кодировок

Если строка считывается некорректно, вы можете применить конструкцию new String(bytes, "UTF-8"), которая перекодирует ISO-8859-1 в UTF-8 и упрощает работу с символами.

Ввод символов вручную: лучше перестраховаться!

Наиболее разумным решением будет избегание ручного ввода не-ASCII символов. Вместо этого можно использовать экранированные символы или обеспечить совместимость используемого редактора с кодировкой UTF-8. Это позволит избежать возможных проблем с интерпретацией символов.

Визуализация

Правильное использование ResourceBundle с кодировкой UTF-8 можно сравнить с разницей между гурманским кофе ☕ и горьким чаем 🍵. Каждый параметр (поведение свойства) настраивается так, чтобы выполнять свою функцию (обеспечивать вкус) независимо от языка или локации пользователя (места происхождения).

Полезные материалы

  1. ResourceBundle (Java Platform SE 8)
  2. Дополнительные символы на платформе Java
  3. java – Использование кодировки UTF-8 в ресурсных файлах свойств с ResourceBundle – Stack Overflow
  4. Подключение ResourceBundle к файлам свойств (Туториалы Java™ > Интернационализация > Изолирование локально-специфических данных)
  5. Интернационализация: Понимание локалей на платформе Java
  6. utf 8 – Установка стандартной кодировки символов в Java – Stack Overflow