utf 8 номер кодировки
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Содержание
История создания
До появления Unicode UTF-8 широко использовались другие кодировки (ASCII, ISO/IEC 646, ISO/IEC 8859, KOI8, Windows-125x).
Впервые кодировка UTF-8 была официально представлена на конференции USENIX в Сан Диего в январе 1993. От других мультибайтных кодировок ее отличала полная совместимость с ASCII: все символы ASCII в UTF-8 кодируются 7 битами. Каждый символ кодировки, отличный от ASCII, состоит из ведущего байта, указывающего длину последовательности, и одного или нескольких продолжающих байт. Такой принцип позволяет определить длину последовательности только по первому байту. Коды символов ASCII, ведущих и продолжающих байт не пересекаются, что позволяет легко найти начало последовательности простым откатом назад максимум на пять байт.
В ноябре 2003 года стандартом RFC-3629 максимальная длина последовательности UTF-8 была ограничена четырьмя байтами, однако потенциально UTF-8 позволяет использовать последовательности вплоть до шести байт. На сегодняшний день самой распространенной кодировкой является UTF-8. Она включает в себя более двух миллионов символов: все возможные современные алфавиты, цифры, знаки препинания, математические и специальные символы, музыкальные знаки и символы вымерших форм письменности. А резерва UTF-8 хватит для размещения более двух миллиардов символов. Так что о смене кодировки в ближайшее время задумываться не придётся.
Однако торжество современных технологий — явление относительно новое. Согласно Google, самой распространенной в интернете кодировкой UTF-8 стала только в 2008 году — тогда ее использовали чуть более чем 25% проиндексированных веб-страниц. А еще в 2006 UTF-8 использовали менее чем 10% веб-страниц.
Стремительный рост популярности кодировки UTF-8 связан с целым рядом ее преимуществ перед предшественницами. [Источник 3]
Принципы работы
UTF-8 является лишь представлением Unicode в 8-битном виде. Символы с кодами меньше 128 представляются одним байтом (Латинский алфавит, простейшие знаки препинания и арабские цифры), а так как в Unicode они повторяют ASCII, то текст написанный только этими символами будет являться текстом в ASCII.
Символы с кодами от:
5 и 6 байтов не используется в Unicode. [Источник 4]
Преимущества и недостатки
Общие преимущества
В сравнении с однобайтовыми кодировками.
Преимущества
Недостатки
Сравнение с другими многобайтовыми кодировками
Преимущества
Недостатки
Сравнение с UTF-16
Преимущества
Недостатки
Макет кодовой страницы
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _D | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ | NUL 0000 0 | SOH 0001 1 | STX 0002 2 | ETX 0003 3 | EOT 0004 4 | ENQ 0005 5 | ACK 0006 6 | BEL 0007 7 | BS 0008 8 | HT 0009 9 | LF 000A 10 | VT 000B 11 | FF 000C 12 | CR 000D 13 | SO 000E 14 | SI 000F 15 |
1_ | DLE 0010 16 | DC1 0011 17 | DC2 0012 18 | DC3 0013 19 | DC4 0014 20 | NAK 0015 21 | SYN 0016 22 | ETB 0017 23 | CAN 0018 24 | EM 0019 25 | SUB 001A 26 | ESC 001B 27 | FS 001C 28 | GS 001D 29 | RS 001E 30 | US 001F 31 |
2_ | SP 0020 32 | ! 0021 33 | » 0022 34 | # 0023 35 | $ 0024 36 | % 0025 37 | & 0026 38 | ‘ 0027 39 | ( 0028 40 | ) 0029 41 | * 002A 42 | + 002B 43 | , 002C 44 | — 002D 45 | . 002E 46 | / 002F 47 |
3_ | 0 0030 48 | 1 0031 49 | 2 0032 50 | 3 0033 51 | 4 0034 52 | 5 0035 53 | 6 0036 54 | 7 0037 55 | 8 0038 56 | 9 0039 57 | : 003A 58 | ; 003B 59 | 003C 60 | = 003D 61 | > 003E 62 | ? 003F 63 |
4_ | @ 0040 64 | A 0041 65 | B 0042 66 | C 0043 67 | D 0044 68 | E 0045 69 | F 0046 70 | G 0047 71 | H 0048 72 | I 0049 73 | J 004A 74 | K 004B 75 | L 004C 76 | M 004D 77 | N 004E 78 | O 004F 79 |
5_ | P 0050 80 | Q 0051 81 | R 0052 82 | S 0053 83 | T 0054 84 | U 0055 85 | V 0056 86 | W 0057 87 | X 0058 88 | Y 0059 89 | Z 005A 90 | [ 005B 91 | \ 005C 92 | ] 005D 93 | ^ 005E 94 | _ 005F 95 |
6_ | ` 0060 96 | a 0061 97 | b 0062 98 | c 0063 99 | d 0064 100 | e 0065 101 | f 0066 102 | g 0067 103 | h 0068 104 | i 0069 105 | j 006A 106 | k 006B 107 | l 006C 108 | m 006D 109 | n 006E 110 | o 006F 111 |
7_ | p 0070 112 | q 0071 113 | r 0072 114 | s 0073 115 | t 0074 116 | u 0075 117 | v 0076 118 | w 0077 119 | x 0078 120 | y 0079 121 | z 007A 122 | < 007B 123 | | 007C 124 | > 007D 125 | 007E | DEL 007F 127 |
8_ | • +00 128 | • +01 129 | • +02 130 | • +03 131 | • +04 132 | • +05 133 | • +06 134 | • +07 135 | • +08 136 | • +09 137 | • +0A 138 | • +0B 139 | • +0C 140 | • +0D 141 | • +0E 142 | • +0F 143 |
9_ | • +10 144 | • +11 145 | • +12 146 | • +13 147 | • +14 148 | • +15 149 | • +16 150 | • +17 151 | • +18 152 | • +19 153 | • +1A 154 | • +1B 155 | • +1C 156 | • +1D 157 | • +1E 158 | • +1F 159 |
A_ | • +20 160 | • +21 161 | • +22 162 | • +23 163 | • +24 164 | • +25 165 | • +26 166 | • +27 167 | • +28 168 | • +29 169 | • +2A 170 | • +2B 171 | • +2C 172 | • +2D 173 | • +2E 174 | • +2F 175 |
B_ | • +30 176 | • +31 177 | • +32 178 | • +33 179 | • +34 180 | • +35 181 | • +36 182 | • +37 183 | • +38 184 | • +39 185 | • +3A 186 | • +3B 187 | • +3C 188 | • +3D 189 | • +3E 190 | • +3F 191 |
2-byte C_ | 0000 192 | 0040 193 | Latin 0080 194 | Latin 00C0 195 | Latin 0100 196 | Latin 0140 197 | Latin 0180 198 | Latin 01C0 199 | Latin 0200 200 | IPA 0240 201 | IPA 0280 202 | IPA 02C0 203 | accents 0300 204 | accents 0340 205 | Greek 0380 206 | Greek 03C0 207 |
2-byte D_ | Cyril 0400 208 | Cyril 0440 209 | Cyril 0480 210 | Cyril 04C0 211 | Cyril 0500 212 | Armeni 0540 213 | Hebrew 0580 214 | Hebrew 05C0 215 | Arabic 0600 216 | Arabic 0640 217 | Arabic 0680 218 | Arabic 06C0 219 | Syriac 0700 220 | Arabic 0740 221 | Thaana 0780 222 | N’Ko 07C0 223 |
3-byte E_ | Indic 0800* 224 | Misc. 1000 225 | Symbol 2000 226 | Kana, CJK 3000 227 | CJK 4000 228 | CJK 5000 229 | CJK 6000 230 | CJK 7000 231 | CJK 8000 232 | CJK 9000 233 | Asian A000 234 | Hangul B000 235 | Hangul C000 236 | Hangul D000 237 | PUA E000 238 | Forms F000 239 |
4‑byte F_ | SMP, SIP 10000* 240 | 40000 241 | 80000 242 | SSP, SPUA C0000 243 | SPUA-B 100000 244 | 140000 245 | 180000 246 | 1C0000 247 | 5-byte 200000* 248 | 5-byte 1000000 249 | 5-byte 2000000 250 | 5-byte 3000000 251 | 6-byte 4000000* 252 | 6-byte 40000000 253 | 254 | 255 |
Оранжевые ячейки с большой точкой являются байтами продолжения. Шестнадцатеричное число, указанное после знака «+», представляет собой значение шести бит, которые они добавляют.
Красные клетки никогда не должны появляться в действительной последовательности UTF-8. Первые два (C0 и C1) могли использоваться только для недопустимого «чрезмерного кодирования» символов ASCII (то есть, пытаясь закодировать 7-битное значение ASCII между 0 и 127, используя два байта вместо одного, см. Ниже). Оставшиеся красные ячейки указывают ведущие байты последовательностей, которые могут только кодировать числа, превышающие предел 0x10FFFF в Юникоде, или которые также никогда не использовались в исходном проекте для 31 бита (FE и FF).
Розовые ячейки являются ведущими байтами для последовательности из нескольких байтов, из которых допустимы некоторые, но не все возможные последовательности продолжения. E0 и F0 могут начинать сглаженные кодировки, в этом случае отображается самая низкая незашифрованная кодовая точка, помеченная звездочкой «*». F4 может запускать кодовые точки более 0x10FFFF, которые являются недопустимыми. ED может начать кодирование суррогатной половины, которая не может быть закодирована в UTF-16 и также недействительна.
Кодирование и декодирование
UTF-32LE в UTF-8
Схемой можете воспользоваться при кодировании и раскодировании.
Эта схема сделана так, чтобы вы видели какие биты куда попадают как при кодировании, так и раскодировании. По ней видно что при этих обоих процессах просто нужные биты выставляются на нужные позиции при нужных значениях контрольных бит. Можно заметить что компоновка в больших байтовых последовательностях осуществляется по 6 бит (в так называемых лидирующих байтах). При этом старшие биты предусматриваемого кода будут в первых байтах (схоже с порядком Big-Endian). [Источник 7]
Кодирование
Порядок действий такой:
Function EncodeUTF8(s)
Декодирование
Function DecodeUTF8(s)
Ошибки кодирования/декодирования
Примеры ниже приведены для быстрой ориентации в случаях некорректного декодирования текст. Так выглядит фраза «Человек сейчас увидит лишь то, что ожидает увидеть.» если она воспринята декодировщиком в кодировке Windows-1251, а не UTF-8:
ЧеловеРѻ СЃРµРв»-час СѻРІРёРґРёС‚ лишь то, что ожидает Сѻвидеть.