Представление символов, таблицы кодировок — различия между версиями
| Ruslan (обсуждение | вклад) | Ruslan (обсуждение | вклад)  | ||
| Строка 61: | Строка 61: | ||
| Кодировка Unicode может использовать 16-битные или 32-разрядных числа и приложение должно знать как дальше с ним поступать. Поэтому потребность в BOM возникает при обмене документами. | Кодировка Unicode может использовать 16-битные или 32-разрядных числа и приложение должно знать как дальше с ним поступать. Поэтому потребность в BOM возникает при обмене документами. | ||
| − | + | В начале Unicode файла вы можете найти несколько байтов, отображающих Unicode точку кода U+FEFF ZERO WIDTH NON-BREAKING SPACE (ZWNBSP). Эта комбинация байтов известна как byte-order mark (BOM). | |
| − | В  | ||
| − | + | Когда символ закодирован в UTF-16, его 2 или 4 байта можно упорядочить двумя разными способами (little-endian или big-endian). Изображение ниже показывает это. byte-order mark указывает, какой порядок используется, так что приложения могут немедленно расшифровать контент. UTF-16 контент должен всегда начинатся с BOM. | |
| − | == Представление BOM в  | + | [[Файл:Bom.png|thumb|left| 400px]] | 
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | == Представление BOM в кодировках == | ||
| {| class="wikitable" | {| class="wikitable" | ||
| |- | |- | ||
| ! Кодирование | ! Кодирование | ||
| − | ! Представление ( | + | ! Представление (Шестнадцатеричное) | 
| ! Представление (ISO-8859-1) | ! Представление (ISO-8859-1) | ||
| |- | |- | ||
Версия 05:26, 26 октября 2011
Содержание
Представление символов в вычислительных машинах
В вычислительных машинах символы не могут храниться иначе, как в виде последовательностей битов (как и числа). Для передачи символа и его корректного отображения ему должна соответствовать уникальная последовательность нулей и единиц. Для этого были разработаны таблицы кодировок.
Количество символов, которые можно задать последовательностью битов длины n, задается простой формулой . Таким образом, от нужного количества символов напрямую зависит количество используемой памяти.
Таблицы кодировок
На заре компьютерной эры на каждый символ было отведено по 5 бит. Это было связано с малым количеством оперативной памяти на компьютерах тех лет. В эти 64 символа входили только управляющие символы и строчные буквы английского алфавита.
С ростом производительности компьютеров стали появляться таблицы кодировок с большим количеством символов. Первой 7 битной кодировкой стала ASCII7. В нее уже вошли прописные буквы английского алфавита, арабские цифры, знаки препинания. Затем на ее базе была разработана ASCII8, в которым уже стало возможным хранение 256 символов: 128 основных и еще столько же расширенных. Первая часть таблицы осталась без изменений, а вторая может иметь различные варианты (каждый имеет свой номер). Эта часть таблицы стала заполняться символами национальных алфавитов.
| Определение: | 
| ASCII - таблицы кодировок, в которых содержатся основные символы (английский алфавит, цифры, знаки препинания, символы национальных алфавитов(свои для каждого региона), служебные символы) и длина кода каждого символа бит. | 
Но для многих языков (например, арабского, японского, китайского) 256 символов недостаточно, поэтому развитие кодировок продолжалось, что привело к появлению UNICODE.
| Определение: | 
| UNICODE - таблицы кодировок, в которых содержатся все используемые символы и длина кода каждого символа бит. | 
Наиболее известные кодировки
7 бит:
- ASCII7 - первая кодировка, пригодная для работы с текстом. Помимо маленьких букв английского алфавита и служебных символов, содержит большие буквы английского языка, цифры, знаки препинания и другие символы.
Кодировки стандарта ASCII (8 бит):
- ASCII - первая кодировка, в которой стало возможно использовать символы национальных алфавитов.
- КОИ8-R - первая русская кодировка. Символы кириллицы расположены не в алфавитном порядке. Их разместили в верхнюю половину таблицы так, чтобы позиции кириллических символов соответствовали их фонетическим аналогам в английском алфавите. Это значит, что даже при потере старшего бита каждого символа, например, при проходе через устаревший семибитный модем, текст остается "читаемым".
- CP866 - русская кодировка, использовавшаяся на компьютерах IBM в системе DOS.
- Windows-1251 - русская кодировка, использовавшаяся в русскоязычных версиях операционной системы Windows в начале 90-х годов. Кириллические символы идут в алфавитном порядке. Содержит все символы, встречающиеся в типографике обычного текста (кроме знака ударения).[1]
Кодировки стандарта UNICODE:
- UTF8 - самая распространенная на данный момент кодировка из семейства UNICODE. [2]
| Unicode | UTF-8 | Представленные символы | 
|---|---|---|
| 0x00000000—0x0000007F | 0xxxxxxx | ASCII, в том числе английский алфавит, простейшие знаки препинания и арабские цифры | 
| 0x00000080—0x000007FF | 110xxxxx 10xxxxxx | кириллица, расширенная латиница, арабский алфавит, армянский алфавит, греческий алфавит, еврейский алфавит и коптский алфавит; сирийское письмо, тана, нко; Международный фонетический алфавит; некоторые знаки препинания | 
| 0x00000800—0x0000FFFF | 1110xxxx 10xxxxxx 10xxxxxx | все другие современные формы письменности, в том числе грузинский алфавит, индийское, китайское, корейское и японское письмо; сложные знаки препинания; математические и другие специальные символы | 
| 0x00010000—0x001FFFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | музыкальные символы, редкие китайские иероглифы, вымершие формы письменности | 
| 111111xx | служебные символы c, d, e, f | 
Также возможны коды длиной в 5 и 6 байт, но на практике они не используются. Это связано с тем, что в стандарт Unicode не входят символы с кодом выше 0x10ffff.
BOM
Byte Order Mark (BOM) - Unicode символ, используемый для индикации порядка байтов (порядка байт) текстового файла. Его кодовый символ U+FEFF. По спецификации его использование не является обязательным, однако если BOM используется, то он должен быть установлен вначале текстового файла. Помимо своего конкретного использования в качестве указателя порядка байтов, символ может также указать какой кодировкой Unicode закодирован текст.
Кодировка Unicode может использовать 16-битные или 32-разрядных числа и приложение должно знать как дальше с ним поступать. Поэтому потребность в BOM возникает при обмене документами.
В начале Unicode файла вы можете найти несколько байтов, отображающих Unicode точку кода U+FEFF ZERO WIDTH NON-BREAKING SPACE (ZWNBSP). Эта комбинация байтов известна как byte-order mark (BOM).
Когда символ закодирован в UTF-16, его 2 или 4 байта можно упорядочить двумя разными способами (little-endian или big-endian). Изображение ниже показывает это. byte-order mark указывает, какой порядок используется, так что приложения могут немедленно расшифровать контент. UTF-16 контент должен всегда начинатся с BOM.
Представление BOM в кодировках
| Кодирование | Представление (Шестнадцатеричное) | Представление (ISO-8859-1) | 
|---|---|---|
| UTF-8 | EF BB BF |  | 
| UTF-16 (BE) | FE FF | þÿ | 
| UTF-16 (LE) | FF FE | ÿþ | 
| UTF-32 (BE) | 00 00 FE FF | □□þÿ(□ ASCII символ нуль) | 
| UTF-32 (LE) | FF FE 00 00 | ÿþ□□(□ ASCII символ нуль) | 
К сожалению, этот способ не позволяет надёжно различать UTF-16LE и UTF-32LE, поскольку символ U+0000 допускается Юникодом (хотя реальные тексты редко начинаются с него).

