В-четвертых, проблема Unicode
Следует отметить, что Unicode — это просто набор символов, он только указывает двоичный код символа, но не указывает, как этот двоичный код должен храниться.
Например, китайские иероглифыЮникод — это шестнадцатеричное число., Преобразуется в двоичное число с 15 битами (), то есть для представления этого символа требуется не менее 2 байтов. Представляет другие символы большего размера, для которых может потребоваться 3 или 4 байта или даже больше.
Здесь возникают два серьезных вопроса. Первый вопрос: как отличить Unicode от ASCII? Как компьютер узнает, что три байта представляют собой символ, а не три символа по отдельности? Вторая проблема заключается в том, что мы уже знаем, что английские буквы представлены только одним байтом.Если Unicode предусматривает, что каждый символ представлен тремя или четырьмя байтами, то перед каждой английской буквой должно стоять два. До трех байтов, Это огромная трата памяти, размер текстового файла будет в два-три раза больше, что недопустимо.
Результатом этого является: 1) Существует несколько методов хранения Unicode, что означает, что существует множество различных двоичных форматов, которые могут использоваться для представления Unicode. 2) Юникод нельзя продвигать долго, до появления Интернета.
Место хранения
7-битный диапазон ASCII означает, что каждый символ хранится в одном 8-битном байте; запасной бит не используется в стандартном ASCII. Это упрощает расчет размера: длина текста в символах – это размер файла в байтах.
Вы можете подтвердить это с помощью следующей последовательности команд bash. Сначала мы создаем файл, содержащий 12 букв текста:
Чтобы проверить, что текст находится в кодировке ASCII, мы можем использовать команду file :
Наконец, чтобы получить точное количество байтов, которое занимает файл, мы используем команду stat :
Поскольку стандарт Unicode имеет дело с гораздо большим диапазоном символов, файл Unicode, естественно, занимает больше места для хранения. Сколько именно зависит от кодировки.
Повторение того же набора команд, что и ранее, с использованием символа, который не может быть представлен в ASCII, дает следующее:
Этот единственный символ занимает 3 байта в файле Unicode
Обратите внимание, что bash автоматически создал файл UTF-8, поскольку файл ASCII не может хранить выбранный символ (€). UTF-8 на сегодняшний день является наиболее распространенной кодировкой символов для Unicode; UTF-16 и UTF-32 – две альтернативные кодировки, но они используются гораздо реже
UTF-8 – это кодировка переменной ширины, что означает, что он использует разный объем памяти для разных кодовых точек. Каждая кодовая точка будет занимать от одного до четырех байтов с намерением, чтобы более общие символы занимали меньше места, обеспечивая тип встроенного сжатия. Недостатком является то, что определение требований к длине или размеру данного фрагмента текста становится намного более сложным.
ГДЗ
Задание 1
Определить, какие символы кодировочной таблицы ASCII (DOS) соответствуют всем прописным буквам русского алфавита в кодировочной таблице ANSI (Windows). Для выполнения задания создать текст с русским алфавитом в текстовом редакторе «Блокнот», а затем открыть его в режиме просмотра (клавиша F3) в любом файловом менеджере (Windows Commander, Far, Total Commander, Norton Commander) и преобразовать в другую кодировку. После выполнения задания заполнить таблицу.
Буква в ANSI
А
Б
В
Г
д
Е
Ё
Л
3
и
й
Буква в ASCII
Буква в ANSI
к
л
м
н
о
п
р
с
т
у
ф
Буква в ASCII
Буква в ANSI
х
ц
ч
ш
щ
ъ
ы
ь
э
ю
я
Буква в ASCII
Что такое Юникод
Юникод является альтернативой. Он поддерживается Консорциумом Юникод. Он охватывает широкий спектр персонажей.Он содержит представления для букв на таких языках, как английский, греческий, арабский и т. Д., Математические символы, эмодзи и многие другие.
Рисунок 2: Юникод
В Юникоде доступно три типа кодирования. Это UTF-8, UTF-16 и UTF -32. UTF использует 8 бит на символ, UTF-16 использует 16 бит на символ, а UTF-32 использует 32 бита на символ. В UTF-8 первые 128 символов являются символами ASCII. Следовательно, ASCII действителен в UTF-8. Обычно Unicode используется для интернационализации и локализации компьютерного программного обеспечения. Этот стандарт также используется в операционных системах, XML, .NET Framework и языках программирования, таких как Java.
Код ASCII
Мы знаем, что вся информация внутри компьютера в конечном итоге имеет двоичное значение. Каждый двоичный бит (бит) имеетс участиемДва состояния, поэтому восемь двоичных битов могут объединять 256 состояний, что называется байтом. Другими словами, байт может использоваться для представления всего 256 различных состояний, и каждое состояние соответствует символу, который составляет 256 символов.Чтобы。
В 1960-х годах Соединенные Штаты сформулировали набор кодов символов для единообразного регулирования отношений между английскими символами и двоичными цифрами. Это называется кодом ASCII и используется до сих пор.
Код ASCII определяет всего 128 символов, например пробелы.32 (двоичный), заглавные буквы65 (двоичный). Эти 128 символов (включая 32 управляющих символа, которые не могут быть распечатаны) занимают только последние 7 бит байта, а первый бит всегда определяется как。
Переход к Unicode
Развитие интернета, увеличение количества компьютеров и удешевление памяти привели к тому, что проблемы, которые доставляла путаница в кодировках, стали перевешивать некоторую экономию памяти. Особенно ярко это проявлялось в интернете, когда текст написанный на одном компьютере должен был корректно отображаться на многих других устройствах. Это доставляло огромные проблемы как программистам, которые должны были решать какую кодировку использовать, так и конечным пользователям, которые не могли получить доступ к интересующим их текстам.
В результате в октябре 1991 года появилась первая версия одной общей таблицы символов, названной Unicode. Она включала в себя на тот момент 7161 различный символ из 24 письменностей мира.
В Unicode постепенно добавлялись новые языки и символы. Например, в версию 1.0.1 в середине 1992 года добавили более 20 000 идеограмм китайского, японского и корейского языков. В актуальной на текущий момент версии содержится уже более 143 000 символов.
ASCII и HTML
Если в HTML коде перед десятичным кодом ASCII символа поставить &#, то веб-браузер отобразит этот символ.
К примеру, если использовать ', то веб-браузер покажет ‘ (одинарную кавычку). Некоторые преобразователи строк внутри веб-приложения также могут конвертировать написание символов &#XX в их ASCII представления. Поэтому безобидная запись ' внутри веб-приложения может превратиться в одинарную кавычку, которая может нарушить SQL запрос.
Аналогично можно использовать &#x, после которой нужно указать код символа в шестнадцатеричной системе, например, ' также покажет кавычку. Для разделения символов друг от друга, используйте точку с запятой, например, 'hi'
Многие программы понимают шестнадцатеричную запись, правда вид записи может различаться от конкретной программы и языка программирования.
В JavaScript шестнадцатеричные строки записываются в виде экранированной последовательности:
Можно записать код символов в восьмеричной системе счисления:
Аналогично Bash понимает такие строки:
И PHP их обрабатывает верно:
Также выведет:
Набор символов или кодировка символов?
Проще говоря, набор символов – это набор символов (например, AZ), в то время как кодировка символов – это отображение между набором символов и значением, которое может быть представлено в цифровом виде (например, A = 1, B = 2).
Стандарт ASCII фактически является и тем, и другим: он определяет набор символов, которые он представляет, и метод сопоставления каждого символа с числовым значением.
Напротив, слово Unicode используется в нескольких разных контекстах для обозначения разных вещей. Вы можете думать об этом как о всеобъемлющем термине, таком как ASCII, для обозначения набора символов и ряда кодировок. Но поскольку существует несколько кодировок, термин Unicode часто используется для обозначения общего набора символов, а не для того, как они отображаются.
Стандарт ASCII
ASCII (American Standart Code for Inmormation Interchange) — американский стандартный код для обмена информацией. Каждый символ ASCII имеет 7 битов, поэтому максимальное число символов — 128 (таблица 1). Коды от 0 до 1F являются управляющими символами, которые не печатаются. Множество непечатных символов ASCII нужны для передачи данных. К примеру послание может состоять из символа начала заголовка SOH, самого заголовка и символа начала текста STX, самого текста и символа конца текста ETX, и символ конца передачи EOT. Однако данные по сети передаются в пакетах, которые сами отвечают за начало передачи и конец. Так что непечатные символы почти не используются.
Таблица 1 — таблица кодов ASCII
Число | Команда | Значение | Число | Команда | Значение |
---|---|---|---|---|---|
NUL | Пустой указатель | 10 | DLE | Выход из системы передачи | |
1 | SOH | начало заголовка | 11 | DC1 | Управление устройством |
2 | STX | Начало текста | 12 | DC2 | Управление устройством |
3 | ETX | Конец текста | 13 | DC3 | Управление устройством |
4 | EOT | Конец передачи | 14 | DC4 | Управление устройством |
5 | ACK | Запрос | 15 | NAK | Неподтверждение приема |
6 | BEL | Подтверждение приема | 16 | SYN | Простой |
7 | BS | Символ звонка | 17 | ETB | Конец блока передачи |
8 | HT | Отступ назад | 18 | CAN | Отмета |
9 | LF | Горизонтальная табуляция | 19 | EM | Конец носителя |
A | VT | Перевод строки | 1A | SUB | Подстрочный индекс |
B | FF | Вертикальная табуляция | 1B | ESC | Выход |
C | CR | Перевод страницы | 1C | FS | Разделитель файлов |
D | SO | Возврат каретки | 1D | GS | Разделитель группы |
E | SI | Переключение на дополнительный регистр | 1E | RS | Разделитель записи |
SI | Переключение на стандартный регистр | 1F | US | Разделитель модуля |
Число | Символ | Число | Символ | Число | Символ | Число | Символ | Число | Символ | Число | Символ |
---|---|---|---|---|---|---|---|---|---|---|---|
20 | пробел | 30 | 40 | @ | 50 | P | 60 | . | 70 | p | |
21 | ! | 31 | 1 | 41 | A | 51 | Q | 61 | a | 71 | q |
22 | ‘ | 32 | 2 | 42 | B | 52 | R | 62 | b | 72 | r |
23 | # | 33 | 3 | 43 | C | 53 | S | 63 | c | 73 | s |
24 | φ | 34 | 4 | 44 | D | 54 | T | 64 | d | 74 | t |
25 | % | 35 | 5 | 45 | E | 55 | И | 65 | e | 75 | и |
26 | & | 36 | 6 | 46 | F | 56 | V | 66 | f | 76 | v |
27 | ‘ | 37 | 7 | 47 | G | 57 | W | 67 | g | 77 | w |
28 | ( | 38 | 8 | 48 | H | 58 | X | 68 | h | 78 | x |
29 | ) | 39 | 9 | 49 | I | 59 | Y | 69 | i | 70 | y |
2A | ‘ | 3A | ; | 4A | J | 5A | Z | 6A | j | 7A | z |
2B | + | 3B | ; | 4B | K | 5B | 6B | k | 7B | { | |
2C | ‘ | 3C | < | 4C | L | 5C | \ | 6C | l | 7C | | |
2D | — | 3D | = | 4D | M | 5D | 6D | m | 7D | } | |
2E | 3E | > | 4E | N | 5E | — | 6E | n | 7E | ~ | |
2F | 3F | g | 4F | O | 5F | _ | 6F | o | 7F | DEL |
Стандарт Unicode
Предыдущая кодировка отлично подходит для английского языка, однако для других языков она не удобная. К примеру в немецком языке есть умляуты, а в французском надстрочные знаки. Некоторые языки имеют совершенно разные алфавиты. Первой попыткой расширения ASCII был IS646, который расширял предыдущую кодировку еще на 128 символов. Добавлены были латинские буквы со штрихами и диакритическими знаками, и получил название — Latin 1. Следующая попытка была IS 8859 — которые содержал кодовую страницу. Были еще попытки расширений, но это все было не универсальным. Была создана кодировка UNICODE (is 10646). Идея кодировка в том, что бы приписать каждому символу единое постоянное 16-битное значение, которое называется — указателем кода. Всего получается 65536 указателей. Для экономии места использовали Latin-1 для кодов 0 -255, легко изменяя ASII в UNICODE. Такой стандарт решил много проблем, однако не все. В связи с поступлением новых слов, к примеру для японского языка нужно увеличивать количество терминов где-то на 20 тыс. Также нужно включить шрифт брайля.
Размер
Из-за своего объема Unicode представляет гораздо больше символов, чем ASCII. Стандартный ASCII использует 7-битный диапазон для кодирования 128 различных символов . Юникод, с другой стороны, настолько велик, что нам нужно использовать другую терминологию, чтобы говорить об этом!
Unicode обслуживает 1111998 адресуемых кодовых точек. Кодовая точка примерно аналогична пространству, зарезервированному для символа, но ситуация намного сложнее, чем когда вы начинаете вникать в детали!
Более полезное сравнение – сколько скриптов (или систем записи) в настоящее время поддерживается. Конечно, ASCII обрабатывает только английский алфавит, в основном латинский или латинский алфавит. Версия Unicode, выпущенная в 2020 году, идет намного дальше: она поддерживает в общей сложности 154 скрипта.
1251 – кодовая страница Windows
128 Ђ | 144 Ђ | 160 | 176 ° | 192 А | 208 Р | 224 а | 240 р |
129 Ѓ | 145 ‘ | 161 Ў | 177 ± | 193 Б | 209 С | 225 б | 241 с |
130 ‚ | 146 ’ | 162 ў | 178 I | 194 В | 210 Т | 226 в | 242 т |
131 ѓ | 147 “ | 163 J | 179 i | 195 Г | 211 У | 227 г | 243 у |
132 „ | 148 ” | 164 ¤ | 180 ґ | 196 Д | 212 Ф | 228 д | 244 ф |
133 … | 149 • | 165 Ґ | 181 μ | 197 Е | 213 Х | 229 е | 245 х |
134 † | 150 – | 166 ¦ | 182 ¶ | 198 Ж | 214 Ц | 230 ж | 246 ц |
135 ‡ | 151 — | 167 § | 183 · | 199 З | 215 Ч | 231 з | 247 ч |
136 € | 152 □ | 168 Ё | 184 ё | 200 И | 216 Ш | 232 и | 248 ш |
137 ‰ | 153 | 169 | 185 № | 201 Й | 217 Щ | 233 й | 249 щ |
138 Љ | 154 љ | 170 Є | 186 є | 202 К | 218 Ъ | 234 к | 250 ъ |
139 < | 155 > | 171 « | 187 » | 203 Л | 219 Ы | 235 л | 251 ы |
140 Њ | 156 њ | 172 ¬ | 188 j | 204 М | 220 Ь | 236 м | 252 ь |
141 Ќ | 157 ќ | 173 | 189 S | 205 Н | 221 Э | 237 н | 253 э |
142 Ћ | 158 ћ | 174 | 190 s | 206 О | 222 Ю | 238 о | 254 ю |
143 Џ | 159 џ | 175 Ï | 191 ї | 207 П | 223 Я | 239 п | 255 я |
866 – кодовая страница DOS
128 А | 144 Р | 160 а | 176 ░ | 192 └ | 208 ╨ | 224 р | 240 ≡Ё |
129 Б | 145 С | 161 б | 177 ▒ | 193 ┴ | 209 ╤ | 225 с | 241 ±ё |
130 В | 146 Т | 162 в | 178 ▓ | 194 ┬ | 210 ╥ | 226 т | 242 ≥ |
131 Г | 147 У | 163 г | 179 │ | 195 ├ | 211 ╙ | 227 у | 243 ≤ |
132 Д | 148 Ф | 164 д | 180 ┤ | 196 ─ | 212 ╘ | 228 ф | 244 ⌠ |
133 Е | 149 Х | 165 е | 181 ╡ | 197 ┼ | 213 ╒ | 229 х | 245 ⌡ |
134 Ж | 150 Ц | 166 ж | 182 ╢ | 198 ╞ | 214 ╓ | 230 ц | 246 ¸ |
135 З | 151 Ч | 167 з | 183 ╖ | 199 ╟ | 215 ╫ | 231 ч | 247 » |
136 И | 152 Ш | 168 и | 184 ╕ | 200 ╚ | 216 ╪ | 232 ш | 248 ° |
137 Й | 153 Щ | 169 й | 185 ╣ | 201 ╔ | 217 ┘ | 233 щ | 249 · |
138 К | 154 Ъ | 170 к | 186 ║ | 202 ╩ | 218 ┌ | 234 ъ | 250 ∙ |
139 Л | 155 Ы | 171 л | 187 ╗ | 203 ╦ | 219 █ | 235 ы | 251 √ |
140 М | 156 Ь | 172 м | 188 ╝ | 204 ╠ | 220 ▄ | 236 ь | 252 ⁿ |
141 Н | 157 Э | 173 н | 189 ╜ | 205 ═ | 221 ▌ | 237 э | 253 ² |
142 О | 158 Ю | 174 о | 190 ╛ | 206 ╬ | 222 ▐ | 238 ю | 254 ■ |
143 П | 159 Я | 175 п | 191 ┐ | 207 ╧ | 223 ▀ | 239 я | 255 |
Русские названия основных спецсимволов:
Символ | Название |
` | гравис, кавычка, обратный машинописный апостроф |
` | гравис, кавычка, обратный машинописный апостроф |
~ | тильда |
! | восклицательный знак |
@ | эт, коммерческое эт, «собака» |
# | октоторп, решетка, диез |
$ | знак доллара |
% | процент |
^ | циркумфлекс, знак вставки |
& | амперсанд |
* | астериск, звездочка, знак умножения |
( | левая открывающая круглая скобка |
) | правая закрывающая круглая скобка |
— | минус, дефис |
_ | знак подчеркивания |
= | знак равенства |
+ | плюс |
левая открывающая квадратная скобка | |
правая закрывающая квадратная скобка | |
{ | левая открывающая фигурная скобка |
} | правая закрывающая фигурная скобка |
; | точка с запятой |
двоеточие | |
‘ | машинописный апостроф, одинарная кавычка |
« | двойная кавычка |
, | запятая |
. | точка |
слэш, косая черта, знак дроби | |
< | левая открытая угловая скобка, знак меньше |
> | правая закрытая угловая скобка, знак больше |
\ | обратный слэш, обратная косая черта |
| | вертикальная черта |
Кодировка UNICODE
Юникод (Unicode) — стандарт кодирования символов, позволяющий представить знаки практически всех письменных языков. Стандарт предложен в 1991 году некоммерческой организацией «Консорциум Юникода».
В Unicode используются 16-битовые (2-байтовые) коды, что позволяет представить 65536 символов.
Применение стандарта Unicode позволяет закодировать очень большое число символов из разных письменностей: в документах Unicode могут соседствовать китайские иероглифы, математические символы, буквы греческого алфавита, латиницы и кириллицы, при этом становится ненужным переключение кодовых страниц.
Для представления символьных данных в кодировке Unicode используется символьный тип wchar_t.
ASCII | UNICODE |
char | wchar_t |
1 байт | 2 байта |
Тип кодировки задается в свойствах проекта Microsoft Visual Studio:
Многобайтовая кодировка предполагает использование кодировки ASCII.
При этом при построении проекта используется директива условной компиляции, переопределяющая тип TCHAR:
#ifdef _UNICODE typedef wchar_t TCHAR;#else typedef char TCHAR;#endif
_T(«строка»)tchar.hПредставление данных и архитектура ЭВМ
Кодировки стандарта ASCII[править]
Определение: |
ASCII — таблицы кодировок, в которых содержатся основные символы (английский алфавит, цифры, знаки препинания, символы национальных алфавитов(свои для каждого региона), служебные символы) и длина кода каждого символа бит. |
бит:
ASCII7 — первая кодировка, пригодная для работы с текстом. Помимо маленьких букв английского алфавита и служебных символов, содержит большие буквы английского языка, цифры, знаки препинания и другие символы.
Кодировки стандарта ASCII ( бит):
- ASCII — первая кодировка, в которой стало возможно использовать символы национальных алфавитов.
- КОИ8-R — первая русская кодировка. Символы кириллицы расположены не в алфавитном порядке. Их разместили в верхнюю половину таблицы так, чтобы позиции кириллических символов соответствовали их фонетическим аналогам в английском алфавите. Это значит, что даже при потере старшего бита каждого символа, например, при проходе через устаревший семибитный модем, текст остается «читаемым».
- CP866 — русская кодировка, использовавшаяся на компьютерах IBM в системе DOS.
- Windows-1251 — русская кодировка, использовавшаяся в русскоязычных версиях операционной системы Windows в начале 90-х годов. Кириллические символы идут в алфавитном порядке. Содержит все символы, встречающиеся в типографике обычного текста (кроме знака ударения).
Структурные свойства таблицыправить
- Цифры 0-9 представляются своими двоичными значениями (например, ), перед которыми стоит . Таким образом, двоично-десятичные числа (BCD) превращаются в ASCII-строку с помощью простого добавления слева к каждому двоично-десятичному полубайту.
- Буквы A-Z верхнего и нижнего регистров различаются в своём представлении только одним битом, что упрощает преобразование регистра и проверку на диапазон. Буквы представляются своими порядковыми номерами в алфавите, записанными в двоичной системе счисления, перед которыми стоит (для букв верхнего регистра) или (для букв нижнего регистра).
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | TAB | LF | VT | FF | CR | SO | SI | |
1 | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | FS | GS | RS | US |
2 | ! | » | # | $ | % | & | ‘ | ( | ) | * | + | , | — | . | ||
3 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ; | < | = | > | ? | ||
4 | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5 | P | Q | R | S | T | U | V | W | X | Y | Z | \ | ^ | _ | ||
6 | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7 | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | DEL |
Два, не-ASCII кодирование
Кодировки на английском языке 128 символов достаточно, но для других языков 128 символов недостаточно. Например, во французском языке, если над буквой есть фонетический символ, он не может быть представлен кодом ASCII. В результате некоторые европейские страны решили использовать старший бит неиспользуемого байта для программирования нового символа. Например, на французскомКод 130 (двоичный). Таким образом, система кодирования, используемая в этих европейских странах, может представлять до 256 символов.
Однако здесь возникли новые проблемы. В разных странах используются разные буквы, поэтому даже если все они используют методы кодирования 256 символов, они представляют разные буквы. Например, 130 во французском коде означает, Который представляет буквы в кодировке иврита (), который будет представлять другой символ в русской кодировке. Но в любом случае, во всех этих методах кодирования символы, представленные цифрами 0–127, одинаковы, и единственное отличие — это сегмент 128–255.
Что касается шрифтов азиатских стран, то здесь используется больше символов, насчитывающих до 100 000 китайских иероглифов. Один байт может представлять только 256 видов символов, что явно недостаточно, и для представления одного символа необходимо использовать несколько байтов. Например, распространенным методом кодирования для упрощенного китайского языка является GB2312, который использует два байта для представления китайского символа, поэтому теоретически он может представлять до 256 x 256 = 65536 символов.
Вопрос о китайской кодировке необходимо обсудить в специальной статье, которая не освещена в этой заметке. Здесь только указано, что, хотя для представления символа используется несколько байтов, китайская кодировка символов типа GB не имеет ничего общего с Unicode и UTF-8 ниже.
Юникод
Как упоминалось в предыдущем разделе, в мире существует несколько методов кодирования, и одно и то же двоичное число можно интерпретировать как разные символы. Следовательно, если вы хотите открыть текстовый файл, вы должны знать его метод кодирования, в противном случае будут отображаться искаженные символы, если вы декодируете его с помощью неправильного метода кодирования. Почему электронные письма часто выглядят искаженными? Это потому, что метод кодирования, используемый отправителем и получателем, отличается.
Вполне возможно, что если есть какой-то код, в него будут включены все символы мира. Каждому символу присваивается уникальный код, тогда искаженная проблема исчезнет. Это Unicode, как следует из названия, это кодировка всех символов.
Unicode — это, конечно, большая коллекция, и текущий масштаб может содержать более 1 миллиона символов. Кодировка каждого символа разная, например,Представляет арабские буквы,Заглавные буквы, обозначающие английский язык,Представляет китайские иероглифы. Можно запросить конкретную таблицу соответствия символовunicode.org, Или специализированныйТаблица соответствия китайских иероглифов。
Пять, UTF-8
Популярность Интернета настоятельно требует единого метода кодирования. UTF-8 — наиболее широко используемая реализация Unicode в Интернете. Другие методы реализации включают UTF-16 (символы представлены двумя или четырьмя байтами) и UTF-32 (символы представлены четырьмя байтами), но они в основном не используются в Интернете.Повторюсь, здесь связь заключается в том, что UTF-8 является одной из реализаций Unicode.
Одной из самых больших особенностей UTF-8 является то, что это метод кодирования переменной длины. Он может использовать от 1 до 4 байтов для представления символа, а длина байта зависит от разных символов.
Правила кодировки UTF-8 очень простые, их всего два:
1) Для однобайтовых символов первый бит байта устанавливается в, Последние 7 бит — это код Unicode этого символа. Поэтому для английских букв кодировка UTF-8 и код ASCII одинаковы.
2) ДляЗнак байта (), перед первым байтомБиты установлены на, ПервоеНабор бит, Первые две цифры следующих байтов устанавливаются равными. Остальные не упомянутые двоичные биты — это весь код Unicode этого символа.
В следующей таблице приведены правила кодирования, буквыПредставляет доступные закодированные биты.
Согласно приведенной выше таблице интерпретировать кодировку UTF-8 очень просто. Если первый бит байта, Тогда только этот байт является символом; если первый бит, Сколько подряд, Это означает, сколько байтов занимает текущий символ.
Ниже по-прежнему используются китайские иероглифы.Рассмотрим пример, чтобы продемонстрировать, как реализовать кодировку UTF-8.
Юникод — это(), согласно приведенной выше таблице можно найтиВ третьем ряду (),следовательноДля кодировки UTF-8 требуется три байта, то есть формат. Тогда изНачните с последней двоичной цифры и заполните формат в, Дополнительное битовое дополнение. Так понял,Кодировка UTF-8, В шестнадцатеричном формате。
Итак, вот краткое изложение взаимосвязи между этими
ASCII завершает сопоставление только английских букв. Unicode — это просто набор символов. Он определяет двоичный код букв, но не указывает, как хранить символы.
UTF-8 — это кодировка переменной длины, которая может использовать 1–4 байта для представления символа. Для разных символов используются разные байтовые длины. GBK — это метод кодирования, разработанный для облегчения кодирования китайских символов. Приветствую всех пообщаться и поправить.
Примеры[править]
Если записать строку ‘hello мир’ в файл exampleBOM, а затем сделать его hex-дамп, то можно убедиться в том, что разные символы кодируются разным количеством байт. Например, английские буквы,пробел, знаки препинания и пр. кодируются одним байтом, а русские буквы — двумя
Код на pythonправить
#!/usr/bin/env python #coding:utf-8 import codecs f = open('exampleBOM','w') b = u'hello мир' f.write(codecs.BOM_UTF8) f.write(b.encode('utf-8')) f.close()
hex-дамп файла exampleBOMправить
Символ | BOM | h | e | l | l | o | Пробел | м | и | р | |||||
Код в UNICODE | EF | BB | BF | 68 | 65 | 6C | 6C | 6F | 20 | D0 | BC | D0 | B8 | D1 | 80 |
Код в UTF-8 | 11101111 | 10111011 | 10111111 | 01101000 | 01100101 | 01101100 | 01101100 | 01101111 | 00100000 | 11010000 | 10111100 | 11010000 | 10111000 | 11010001 | 10000000 |