Spec-Zone .ru
спецификации, руководства, описания, API
|
Если байтовый массив содержит текст не-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