Кодировки байта и Строки (Учебные руководства Java™> Интернационализация> Работающий с текстом)


След: Интернационализация
Урок: Работа с текстом
Раздел: Преобразование текста неUnicode
Кодировки байта и Строки
Домашняя страница > Интернационализация > Работа с текстом

Кодировки байта и Строки

Если байтовый массив содержит текст не-Unicode, можно преобразовать текст в Unicode с одним из String методы конструктора. Наоборот, можно преобразовать a String объект в байтовый массив символов не-Unicode с String.getBytes метод. Вызывая любой из этих методов, Вы определяете идентификатор кодирования как один из параметров.

Пример, который следует, преобразовывает символы между UTF-8 и Unicode. UTF-8 является форматом передачи для Unicode, который безопасен для файловых систем UNIX. Полный исходный код для примера находится в файле StringConverter.java.

StringConverter программа запускается, создавая a String содержа символы Unicode:

String original = new String("A" + "\u00ea" + "\u00f1" + "\u00fc" + "C");

Когда печатающийся, String именованный original появляется как:

AêñüC

Преобразовать String возразите против UTF-8, вызовите getBytes метод и определяет соответствующий идентификатор кодирования в качестве параметра. getBytes метод возвращает массив байтов в формате UTF-8. Создать a String объект от массива байтов не-Unicode, вызовите String конструктор с параметром кодирования. Код, который выполняет эти вызовы, включается в a try блок, в случае, если указанное кодирование неподдерживается:

try {
    byte[] utf8Bytes = original.getBytes("UTF8");
    byte[] defaultBytes = original.getBytes();

    String roundTrip = new String(utf8Bytes, "UTF8");
    System.out.println("roundTrip = " + roundTrip);
    System.out.println();
    printBytes(utf8Bytes, "utf8Bytes");
    System.out.println();
    printBytes(defaultBytes, "defaultBytes");
} 
catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}

StringConverter программа распечатывает значения в utf8Bytes и defaultBytes массивы, чтобы демонстрировать важный момент: длина преобразованного текста не могла бы быть тем же самым как длиной исходного текста. Некоторые символы Unicode преобразовывают в единственные байты, других в пар или триплеты байтов.

printBytes метод выводит на экран байтовые массивы, вызывая byteToHex метод, который определяется в исходном файле, UnicodeFormatter.java. Вот printBytes метод:

public static void printBytes(byte[] array, String name) {
    for (int k = 0; k < array.length; k++) {
        System.out.println(name + "[" + k + "] = " + "0x" +
            UnicodeFormatter.byteToHex(array[k]));
    }
}

Вывод printBytes метод следует. Отметьте, что только первые и последние байты, A и символы C, являются тем же самым в обоих массивах:

utf8Bytes[0] = 0x41
utf8Bytes[1] = 0xc3
utf8Bytes[2] = 0xaa
utf8Bytes[3] = 0xc3
utf8Bytes[4] = 0xb1
utf8Bytes[5] = 0xc3
utf8Bytes[6] = 0xbc
utf8Bytes[7] = 0x43
defaultBytes[0] = 0x41
defaultBytes[1] = 0xea
defaultBytes[2] = 0xf1
defaultBytes[3] = 0xfc
defaultBytes[4] = 0x43

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Преобразование текста неUnicode
Следующая страница: Символьные и Потоки байтов



Spec-Zone.ru - all specs in one place