Зачем тебе программирование?
Самая маленькая единица хранения в компьютере — байт (байт), а количество символов, которые можно представить байтом, ограничено — 1 байт=8 бит, байт может представлять максимум 255 символов, и существует множество языков в мире, есть разные символы, которые нельзя представить байтом, поэтому символ представления char в Java предназначен для решения этой задачи кодирования: один символ занимает два байта, поэтому его нужно кодировать между char и самым маленьким единичным байтом. Противоположность — декодирование.
На самом деле, кодирование и декодирование — это завершённый процесс перевода («перевод» легко понять), а различные методы кодирования являются словарями.
1. ASCII-код
Полное название — American Standard Code for Information Interchange, который является самой распространённой в мире однобайтовой системой кодирования, в основном используемой для отображения современного английского и других западноевропейских языков.
ASCII-код представлен 7 битами, которые могут представлять только 128 символов, а 0~31 — управляющими символами, такими как enter, backspace, delete и др.; 32~126 означает, что печатные символы можно вводить через клавиатуру и отображать.
Среди них 48~57 — это от 0 до 9 десяти арабских цифр, 65~90 — 26 заглавных английских букв, 97~122 — 26 строчных английских букв, а остальные — это знаки препинания, символы операций и т.д., которые могут ссылаться на стандартную таблицу ASCII для подробностей.
2、ISO-8859-1
Это кодирование является расширением ASCII-кодирования, но всё равно является однобайтовым кодированием и может представлять всего 256 символов.
Поскольку ASCII может представлять только 128 символов, дисплей не может быть полностью выраженISO-8859-1 расширяет ASCII-кодированиеПоверх ASCII-кода добавляются соответствующие текстовые символы западноевропейских языков — греческого, тайского, арабского и иврита, и он обратно совместим с кодированием ASCII.
3、GB2312
Полное название GB2312 — «Information Technology Chinese Encoding Character Set (Набор символов в области китайского кодирования), это двухбайтовое кодирование с диапазоном кодирования от A1 до F7, при этом A1-A9 является областью символов, содержащая всего 682 символа; B0-F7 — это область кандзи, содержащая 6763 кандзи.
Полное название — это набор китайских иероглифов для обмена информацией, выпущенный Китаем в 1980 году и в основном используемый для обработки китайских иероглифов в компьютерных системах. GB2312 в основном содержит 6763 китайских иероглифа и 682 символа.
GB2312 охватывает большую часть использования китайских иероглифов, но не может обрабатывать специальные редкие иероглифы, такие как древние китайские, поэтому коды вроде GBK и GB18030 появились позже.
4、GBK
Полное название GBK — «Chinese Character Internal Code Extension Specification», которая, по-видимому, расширяла GB2312, её диапазон кодирования — 8140-FEFE (без XX7F), с общим количеством 23940 кодовых бит, что может представлять 21003 китайских иероглифов, а кодировка совместима с GB2312
GBK, полное название Chinese Internal Code Specification, было разработано в 1995 году. Он в основном расширяет GB2312 и добавляет больше китайских иероглифов, в общей сложности 21 003 китайских иероглифа.
GBK обратно совместим с кодированием GB2312, что означает, что китайские иероглифы, закодированные в GB2312, можно декодировать нормально с GBK и они не будут выглядеть искажёнными, но китайские иероглифы, закодированные GBK, не обязательно декодируются GB2312.
5、GB18030
GB18030 полное название — Chinese Character Internal Code Extension Specification, это последний внутренний набор кодовых символов, выпущенный в 2000 году и введённый в силу в 2001 году, включающий языковые иероглифы большинства этнических меньшинств Китая, и содержит более 70 000 китайских иероглифов.
В основном он использует однобайтовое, двухбайтовое и четырёхбайтовое кодирование символов, а также обратно совместим с GB2312 и GBK, хотя в нашей стране является обязательным стандартом, но редко применяется в реальном производстве, и наиболее часто используются GBK и GB2312.
6.ЮНИКОД
Чтобы их язык мог нормально отображаться на компьютере, у каждой страны и региона есть свой собственный код, поэтому никто не знает кода друг друга, если кодов слишком много, в то время организация ISO предложила новый код под названием UNICODE coding для поддержки глобальных культур, символов и символов. Когда UNICODE был сформулирован, проблема с ёмкостью компьютера перестала, поэтому он был рассчитан на фиксированный два байта, а все символы отображались в 16 битах, включая английские, которые раньше занимали всего 8 бит, что привело бы к пустой трате места, и UNICODE долгое время не продвигался и не применялся.
7、UTF-16
Появление UTF-16 — это создание нового супралингвального словаря, через который все языки мира могут переводить друг друга, можете представить, насколько сложен и огромный этот словарь. UTF-16 использует два байта для представления формата преобразования Unicode (два байта — это 16 бит, то есть UTF-16) — это метод представления фиксированной длины, то есть любой символ может быть представлен в двух байтах. Это делает изображение персонажей очень удобным. Однако есть и недостаток: большая часть символов может быть представлена в одном байте, а UTF-16 использует два байта, что является пустой тратой памяти. Существует другой способ кодирования — UTF-8.
UTF-16 — это конкретная реализация UNICODE, 16 — это 16 бит, UTF-16 — это источник, определяющий способ хранения символов UNICODE в компьютере, UTF-16 также использует два байта для представления любого символа, что делает строку операций очень эффективной, что также является важной причиной, почему java использует UTF-16 как формат для хранения символов в памяти.
UTF-16 подходит для использования между диском и памятью, а преобразование символов и байтов между собой и между собой будет проще и эффективнее, но он не подходит для сетевой передачи, что может повредить поток байтов.
8、UTF-8
UTF-8 использует технологию переменной длины, при которой каждая область кодирования имеет разную длину кода, а различные типы символов могут состоять из 1-6 байт.
Правила кодирования для UTF-8 следующие:
1) Если это 1 байт, а самый высокий бит — 0, это значит, что это 1 ASCII-символ. Видно, что все ASCII-кодировки уже имеют UTF-8
2) Если это 1 байт, начиная с 11, количество последовательных единиц подразумевает количество байтов этого символа, например: 110xxxxx означает, что это первый байт двубайтового символа UTF-8
3) Если это 1 байт, начиная с 10, это значит, что это не первый байт, нужно ждать первого байта текущего символа.
Хотя UTF-16 очень эффективен, он также является самым большим недостатком UNICODE, поскольку все однобайтовые символы должны учитывать два байта, а пространство памяти удваивается, что, очевидно, требует ресурсов и не соответствует текущей ситуации быстрого развития Интернета. Таким образом, с UTF-8 это реализация кодирования символов переменной длины в UNICODE, которая может использовать 1~6 байтов фиксированной длины для кодирования символов UNICODE.
UTF-8 использует одинарное хранилище для ASCII-символов, и если один символ повреждён, это не повлияет на последующие символы, поэтому UTF-8 идеально подходит для традиционных онлайн-кодировок и является одним из самых широко используемых сегодня кодировок.
Если вы хотите представить китайский, эффективность кодирования UTF-8 выше, чем GBK, и меньше, чем UTF-16, поэтому это также самый идеальный метод кодирования, кроме GBK. |