Не следует забывать о том, что программист во время создания программы вынужден работать с Java-компилятором. При этом неизбежно использование инструментальных средств, работающих в локальной операционной системе.
Предположим, что для создания исходных файлов Java-программы используется стандартная программа Notepad в китайской версии Windows. Полученный в результате этого исходный код не является переносимым(то есть независимым от платформы) из-за использования локальной кодировки символов(GB или BIG5, в зависимости от типа региональных настроек операционной системы).
Классы становятся переносимыми только после компиляции. В этом случае идентификаторы и текстовые сообщения представляются с помощью модифицированной кодировки UTF-8. Сказанное означает, что при компиляции и выполнении программы предполагается использование трех кодировок символов.
- Исходные файлы: локальная кодировка.
- Файлы классов: модифицированная кодировка UTF-8.
- Виртуальная машина: кодировка UTF-16.
Указать кодировку исходного файла позволяет опция -encoding, например:
1 |
javac -encoding Big5 Myfile.java |
Для того чтобы сделать исходные файлы переносимыми, следует ограничиться применением только ASCII-символов. Иными словами, необходимо заменить все символы, не принадлежащие ASCII, их эквивалентным представлением в кодировке Unicode.
Например, вместо строки Hauser следует использовать строку H\u0084user. Для преобразования представленных в локальной кодировке текстов в виде ASCII-символов можно применять утилиту native2ascii, которая входит в состав JDK. Эта утилита заменяет каждый символ, отличный от ASCII, последовательностью \uXXXX, где XXXX — четыре шестнадцатеричные цифры Unicode-кода этого символа. При использовании программы native2ascii в командной строке нужно указать имя исходного и целевого файла:
1 |
native2ascii Myfile.java Myfile.temp |
Для обратного преобразования служит опция -reverse:
1 |
native2ascii -reverse Myfile.temp Myfile.java |
Для указания кодировки предусмотрена опция -encoding, за которой следует название кодировки.
1 |
native2ascii -encoding Big5 Myfile.java Myfile.temp |
Настоятельно рекомендую ограничиться использованием в именах классов ASCII-символов. Название файла класса происходит от имени соответствующего класса, поэтому особенности обработки символов, отличных от ASCII, в именах зависит от операционной системы. Например, в европейской версии Windows 95 для записи имен файлов используется кодировка Code Page 437(original PC). Поэтому если вы создадите класс с именем Bar и попытаетесь выполнить его в системе Windows 95, то получите сообщение об ошибке cannot find class Bar.
Кстати, для того чтобы рыночная оценка земли и имущества была выполнена на самом высоком уровне, советуем обратиться к компании buro-ocenki.com. Качественная оценка земельных ресурсов России по очень привлекательным ценам.