Кодирование символов в файлах исходного кода Java

Кодирование символов в файлах исходного кода JavaНе следует забывать о том, что программист во время создания программы вынужден работать с Java-компилятором. При этом неизбежно использование инструментальных средств, работающих в локальной операционной системе.

Предположим, что для создания исходных файлов Java-программы используется стандартная программа Notepad в китайской версии Windows. Полученный в результате этого исходный код не является переносимым(то есть независимым от платформы) из-за использования локальной кодировки символов(GB или BIG5, в зависимости от типа региональных настроек операционной системы).

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

  • Исходные файлы: локальная кодировка.
  • Файлы классов: модифицированная кодировка UTF-8.
  • Виртуальная машина: кодировка UTF-16.

Указать кодировку исходного файла позволяет опция -encoding, например:

Для того чтобы сделать исходные файлы переносимыми, следует ограничиться применением только ASCII-символов. Иными словами, необходимо заменить все символы, не принадлежащие ASCII, их эквивалентным представлением в кодировке Unicode.

Например, вместо строки Hauser следует использовать строку H\u0084user. Для преобразования представленных в локальной кодировке текстов в виде ASCII-символов можно применять утилиту native2ascii, которая входит в состав JDK. Эта утилита заменяет каждый символ, отличный от ASCII, последовательностью \uXXXX, где XXXX — четыре шестнадцатеричные цифры Unicode-кода этого символа. При использовании программы native2ascii в командной строке нужно указать имя исходного и целевого файла:

Для обратного преобразования служит опция -reverse:

Для указания кодировки предусмотрена опция -encoding, за которой следует название кодировки.

Настоятельно рекомендую ограничиться использованием в именах классов ASCII-символов. Название файла класса происходит от имени соответствующего класса, поэтому особенности обработки символов, отличных от ASCII, в именах зависит от операционной системы. Например, в европейской версии Windows 95 для записи имен файлов используется кодировка Code Page 437(original PC). Поэтому если вы создадите класс с именем Bar и попытаетесь выполнить его в системе Windows 95, то получите сообщение об ошибке cannot find class Bar.

Кстати, для того чтобы рыночная оценка земли и имущества была выполнена на самом высоком уровне, советуем обратиться к компании buro-ocenki.com. Качественная оценка земельных ресурсов России по очень привлекательным ценам.