1. Предисловие
При анализе сопоставимого и компаратора был проанализирован метод сравнения класса строки. В основной строке используется массив char [] для хранения элементов. При сравнении сравниваются персонажи двух строк, а персонажи хранятся с помощью char. В это время я вдруг подумал, что это может в Java Store Store Chinese? Позже я обнаружил, что это нормально, и это также приводит к формату кодирования персонажей в Java.
2. Формат хранения Java
В Java следующий код получает различные форматы кодирования символа «Чжан».
Импорт java.io.unsupportedencodingexception; открытый тест класса {public Static String getCode (String Content, String Format) Throws UnsupportEncodingException {byte [] bytes = content.getbytes (format); StringBuffer sb = new StringBuffer (); for (int i = 0; i <bytes.length; i ++) {sb.append (integer.tohexstring (bytes [i] & 0xff) .touppercase ()+""); } вернуть sb.toString (); } public static void main (string [] args) бросает UnsupportedEncodingException {System.out.println ("gbk:" + getCode ("zhang", "gbk")); System.out.println ("GB2312:" + getCode ("Zhang", "GB2312")); System.out.println ("iso-8859-1:" + getCode ("Zhang", "iso-8859-1")); System.out.println ("Unicode:" + getCode ("Zhang", "Unicode")); System.out.println ("UTF-16:" + getCode ("Zhang", "UTF-16")); System.out.println ("utf-8:" + getCode ("Zhang", "UTF-8")); }}Результаты работы:
GBK: D5 C5 GB2312: D5 C5 ISO-8859-1: 3F Unicode: Fe FF 5F 20 UTF-16: FE FF 5F 20 UTF-8: E5 BC A0
Примечание. Из результатов мы можем знать, что GBK символа «Zhang» такой же, как кодирование GB2312, а Unicode такой же, как кодирование UTF-16, но его кодирование ISO-8859-1, Unicode и UTF-8 разные. Итак, в JVM, какой формат кодирования хранится «Чжан»? Давайте начнем наш анализ ниже.
3. Исследуйте секретные идеи
1. Просмотреть формат хранения постоянного пула файла .class
Тестовый код выглядит следующим образом
открытый тест класса {public static void main (string [] args) {string str = "Zhang"; }}Используйте javap -вербоуз -тест. Класс для декомпиляции, и постоянная ситуация объединения заключается в следующем:
Затем используйте WinHex, чтобы открыть файл класса и обнаружите, что символ «Zhang» хранится в постоянном пуле следующим образом
Примечание. Вышеуказанные два могут храниться в файле класса в формате UTF-8.
Но в формате UTF-8 во время выполнения? Продолжайте наше путешествие по исследованию.
2. Узнайте в программе
Используйте следующий код
открытый тест класса {public static void main (string [] args) {string str = "Zhang"; System.out.println (integer.tohexstring (str.codepointat (0)). Touppercase ()); }}Результаты работы:
5F20
Примечание. На основании результатов мы знаем, что во время выполнения JVM использует формат UTF-16 для хранения. UTF-16 обычно хранится с 2 байтами. Если встречаются два байта, это будет представлено 4 байтами. Будет еще одна статья, чтобы представить его позже. Когда мы проверяем исходный код класса символов, мы обнаружим, что он кодируется с использованием UTF-16, и мы нашли ответ, который мы хотим с обеих сторон.
3. Можно ли хранить тип Char на китайском языке?
Основываясь на приведенном выше исследовании, мы уже знаем, что символы в файлах класса Java кодируются в UTF-8 и кодируются и хранятся в UTF-16 при запуске JVM. Персонаж «Чжан» может быть представлен двумя байтами, а Чар также является двумя байтами на Java, поэтому его можно сохранить.
4. Резюме
После приведенного выше анализа мы знаем:
1. Символы кодируются в файле класса в формате UTF-8 и кодируются в формате UTF-16 при запуске JVM.
2. Тип Char составляет два байта и может использоваться для хранения китайцев.
Во время этого звонка я прочитал много информации о персонажах, и я очень подумал и нашел это особенно интересным. Я поделюсь этим следующим образом, поэтому я расскажу ему краткое представление о проблемах кодирования и кодирования в Java. Следите за обновлениями