Пишу по гарячим слідам. Нещодавно мав великі проблеми з кодуванням тексту в Java. І зараз спробую вказати, що може стати підводним каменем у цій справі.

Порада N1

Не використовуйте методів стандартних класів, що використовують кодування, але не вимагають його визначення в параметрах, наприклад String.getBytes(). Такі методи використовують кодування за замовчуванням вашої ОС. Для Windows це WINDOWS-1251, а для Linux – UTF-8.

Те саме стосується і використання FileWriter / FileReader. Ці класи створюють «письменників / читачів», що також використовують кодування за замовчуванням. Краще користуватися OutputStreamWriter / InputStreamReader, де можна вказати конкретне кодування.

Пам’ятайте, що у випадку з кодуванням за замовчуванням можуть виникнути проблеми при розгортці вашого продукту на системі, відмінній від тої, на якій проходила розробка.

Порада N2

При визначенні потрібного кодування через параметри методів чи конструкторів, не робіть цього за допомогою рядків з їхніми назвами. Краще використовувати клас java.nio.charset.Charset. Причин тут 2.

  1. Коли ви викликаєте метод “my string value”.getBytes(“UTF-UNKNOWN”), кодування з такою назвою не буде знайдено, але виклик методу завершиться успішно. Що ви отримаєте? Не знаю. Але головне, що помилка ця буде важко відловлюватися. Але якщо це виглядатиме так:  “my string value”.getBytes(Charset.forName(“UTF-UNKNOWN “)), то отримаєте RuntimeException, помилка швидко дасть про себе знати.
  2. Робота з кодуванням буде проходити швидше, якщо ви десь створити екземпляр Charset, а  потім будете його використовувати.
    
    Charset ch = Charset.forName("UTF-8");
    "my string value".getBytes(ch);
    
Тeги: ,