Перейти на главную страничку сайта (список статей, файлы для скачивания)
Набор символов или кодировка (character set, charset) - это определённая таблица кодирования конечного множества символов.
Кодовая страница (code page) - это однобайтная (8-битная) кодировка.
Кодировка ASCII (American Standard Code for Information Interchange - "аски", с ударением на первом слоге) - это 7-битная (128 символов) кодировка для представления латинского алфавита, десятичных цифр, некоторых знаков препинания, арифметических операций и управляющих символов.
В 8-битных национальных кодировках нижнюю половину кодовой таблицы (0 - 127) занимают символы ASCII, а верхнюю (128 - 255) - другие нужные символы. В Юникоде первые 128 символов тоже совпадают с соответствующими символами ASCII.
Символы ASCII (в шестнадцатеричном представлении):
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | HT | LF | VT | FF | CR | SO | SI |
1 | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | FS | GS | RS | US |
2 | SP | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / |
3 | 0 | 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 |
Управляющие символы и их шестнадцатеричные коды:
NUL | 00 | NULL, пусто. Используется во многих языках программирования как конец строки (строка понимается как последовательность символов). В некоторых операционных системах NUL - последний символ любого текстового файла. |
SOH | 01 | Start Of Heading, начало заголовка. |
STX | 02 | Start of Text, начало текста. Текстом называлась часть сообщения телетайпа, предназначенная для печати. |
ETX | 03 | End of Text, конец текста. Здесь телетайп прекращал печатать. Отсюда происходит использование символа Ctrl-C, имеющего код 03, для прекращения работы чего-то (обычно программы). |
EOT | 04 | End of Transmission, конец передачи. В системе UNIX Ctrl-D, имеющий тот же код, означает конец файла при вводе с клавиатуры. |
ENQ | 05 | Enquire, "прошу подтверждения". |
ACK | 06 | Acknowledgement, "подтверждаю". |
BEL | 07 | Bell, звонок. Часто используется для подачи звукового сигнала. |
BS | 08 | Backspace, возврат на один символ. |
TAB | 09 | Табуляция. Обозначается также HT - Horizontal Tabulation, горизонтальная табуляция. Во многих языках программирования обозначается \t. |
LF | 0A | Line Feed, перевод строки. Сейчас в конце каждой строчки текстового файла ставится либо этот символ, либо CR, либо и тот и другой (CR, затем LF), в зависимости от операционной системы. Во многих языках программирования этот символ обозначается \n и при выводе текста приводит к переводу строки. |
VT | 0B | Vertical Tab, вертикальная табуляция. |
FF | 0C | Form Feed, новая страница. |
CR | 0D | Carriage Return, возврат каретки. Во многих языках программирования этот символ, обозначаемый \r, можно использовать для возврата в начало строчки без перевода строки. В некоторых операционных системах этот же символ, обозначаемый Ctrl-M, ставится в конце каждой строчки текстового файла перед LF. |
SO | 0E | Shift Out, начало использования национальной кодировки. |
SI | 0F | Shift In, обратно к Shift Out. |
DLE | 10 | Data Link Escape, следующие символы имеют специальный смысл. |
DC1 | 11 | Device Control 1, 1-й символ управления устройством - включить устройство чтения перфоленты. |
DC2 | 12 | Device Control 2, 2-й символ управления устройством - включить перфоратор. |
DC3 | 13 | Device Control 3, 3-й символ управления устройством - выключить устройство чтения перфоленты. |
DC4 | 14 | Device Control 4, 4-й символ управления устройством — выключить перфоратор. |
NAK | 15 | Negative Acknowledgment, "не подтверждаю". Обратно к Acknowledgment. |
SYN | 16 | Synchronization. Этот символ передавался, когда для синхронизации было необходимо что-нибудь передать. |
ETB | 17 | End of Text Block, конец текстового блока. |
CAN | 18 | Cancel, отмена (того, что было передано ранее). |
EM | 19 | End of Medium, например, "кончилась перфолента" |
SUB | 1A | Substitute, подставить. Следующий символ — другого цвета или из дополнительного набора символов. |
ESC | 1B | Escape. Следующие символы — что-то специальное. |
FS | 1C | File Separator, разделитель файлов. |
GS | 1D | Group Separator, разделитель групп. |
RS | 1E | Record Separator, разделитель записей. |
US | 1F | Unit Separator, разделитель юнитов. Когда-то поддерживалось 4 уровня структуризации данных: сообщение могло состоять из файлов, файлы из групп, группы из записей, записи из юнитов. |
SP | 20 | Space, пробел. |
DEL | 7F | Delete, стереть (последний символ). |
Кодировка Windows-1251 (cp1251) является стандартной 8-битной кодировкой для всех русских версий Microsoft Windows. Первая часть таблицы кодировки (латиница) полностью соответствует кодировке ASCII. Вторая часть (под символами указаны шестнадцатеричные коды Unicode):
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
8 | Ђ 0402 | Ѓ 0403 | ‚ 201A | ѓ 0453 | „ 201E | … 2026 | † 2020 | ‡ 2021 | € 20AC | ‰ 2030 | Љ 0409 | ‹ 2039 | Њ 040A | Ќ 040C | Ћ 040B | Џ 040F |
9 | ђ 0452 | ‘ 2018 | ’ 2019 | “ 201C | ” 201D | • 2022 | – 2013 | — 2014 | ™ 2122 | љ 0459 | › 203A | њ 045A | ќ 045C | ћ 045B | џ 045F |
|
A | 00A0 | Ў 040E | ў 045E | Ј 0408 | ¤ 00A4 | Ґ 0490 | ¦ 00A6 | § 00A7 | Ё 0401 | © 00A9 | Є 0404 | « 00AB | ¬ 00AC | 00AD | ® 00AE | Ї 0407 |
B | ° 00B0 | ± 00B1 | І 0406 | і 0456 | ґ 0491 | µ 00B5 | ¶ 00B6 | · 00B7 | ё 0451 | № 2116 | є 0454 | » 00BB | ј 0458 | Ѕ 0405 | ѕ 0455 | ї 0457 |
C | А 0410 | Б 0411 | В 0412 | Г 0413 | Д 0414 | Е 0415 | Ж 0416 | З 0417 | И 0418 | Й 0419 | К 041A | Л 041B | М 041C | Н 041D | О 041E | П 041F |
D | Р 0420 | С 0421 | Т 0422 | У 0423 | Ф 0424 | Х 0425 | Ц 0426 | Ч 0427 | Ш 0428 | Щ 0429 | Ъ 042A | Ы 042B | Ь 042C | Э 042D | Ю 042E | Я 042F |
E | а 0430 | б 0431 | в 0432 | г 0433 | д 0434 | е 0435 | ж 0436 | з 0437 | и 0438 | й 0439 | к 043A | л 043B | м 043C | н 043D | о 043E | п 043F |
F | р 0440 | с 0441 | т 0442 | у 0443 | ф 0444 | х 0445 | ц 0446 | ч 0447 | ш 0448 | щ 0449 | ъ 044A | ы 044B | ь 044C | э 044D | ю 044E | я 044F |
Для кодировки cp1251 существуют разновидности (казахская, чувашская и т.д.).
В консоли русифицированных систем семейства Windows NT используется кодировка cp866. Первая часть таблицы кодировки (латиница) полностью соответствует кодировке ASCII. Вторая часть (под символами указаны шестнадцатеричные коды Unicode):
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
8 | А 0410 | Б 0411 | В 0412 | Г 0413 | Д 0414 | Е 0415 | Ж 0416 | З 0417 | И 0418 | Й 0419 | К 041A | Л 041B | М 041C | Н 041D | О 041E | П 041F |
9 | Р 0420 | С 0421 | Т 0422 | У 0423 | Ф 0424 | Х 0425 | Ц 0426 | Ч 0427 | Ш 0428 | Щ 0429 | Ъ 042A | Ы 042B | Ь 042C | Э 042D | Ю 042E | Я 042F |
A | а 0430 | б 0431 | в 0432 | г 0433 | д 0434 | е 0435 | ж 0436 | з 0437 | и 0438 | й 0439 | к 043A | л 043B | м 043C | н 043D | о 043E | п 043F |
B | ░ 2591 | ▒ 2592 | ▓ 2593 | │ 2502 | ┤ 2524 | ╡ 2561 | ╢ 2562 | ╖ 2556 | ╕ 2555 | ╣ 2563 | ║ 2551 | ╗ 2557 | ╝ 255D | ╜ 255C | ╛ 255B | ┐ 2510 |
C | └ 2514 | ┴ 2534 | ┬ 252C | ├ 251C | ─ 2500 | ┼ 253C | ╞ 255E | ╟ 255F | ╚ 255A | ╔ 2554 | ╩ 2569 | ╦ 2566 | ╠ 2560 | ═ 2550 | ╬ 256C | ╧ 2567 |
D | ╨ 2568 | ╤ 2564 | ╥ 2565 | ╙ 2559 | ╘ 2558 | ╒ 2552 | ╓ 2553 | ╫ 256B | ╪ 256A | ┘ 2518 | ┌ 250C | █ 2588 | ▄ 2584 | ▌ 258C | ▐ 2590 | ▀ 2580 |
E | р 0440 | с 0441 | т 0442 | у 0443 | ф 0444 | х 0445 | ц 0446 | ч 0447 | ш 0448 | щ 0449 | ъ 044A | ы 044B | ь 044C | э 044D | ю 044E | я 044F |
F | Ё 0401 | ё 0451 | Є 0404 | є 0454 | Ї 0407 | ї 0457 | Ў 040E | ў 045E | ° 00B0 | ∙ 2219 | · 00B7 | √ 221A | № 2116 | ¤ 00A4 | ■ 25A0 | 00A0 |
Для кодировки cp866 существуют разновидности (чувашская, ГОСТ 19768-87 и т.д.).
Стандартом для русской кириллицы в юникс-подобных операционных системах является кодировка КОИ-8 (код обмена информацией, 8 битов), или KOI8. Существует несколько вариантов кодировки КОИ-8 для различных кириллических алфавитов. Русский алфавит описывается в кодировке KOI8-R, украинский — в KOI8-U, существуют также кодировки KOI8-RU (русско-белорусско-украинская), KOI8-T (таджикская) и т.д.
Разработчики КОИ-8 разместили символы русского алфавита таким образом, что если в тексте, написанном в КОИ-8, убирать восьмой бит каждого символа, то получается "читабельный" текст, хотя он и написан латинскими символами.
Вторая часть кодировки KOI8-R (русская), под символами указаны шестнадцатеричные коды Unicode:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
8 | ─ 2500 | │ 2502 | ┌ 250C | ┐ 2510 | └ 2514 | ┘ 2518 | ├ 251C | ┤ 2524 | ┬ 252C | ┴ 2534 | ┼ 253C | ▀ 2580 | ▄ 2584 | █ 2588 | ▌ 258C | ▐ 2590 |
9 | ░ 2591 | ▒ 2592 | ▓ 2593 | ⌠ 2320 | ■ 25A0 | ∙ 2219 | √ 221A | ≈ 2248 | ≤ 2264 | ≥ 2265 | 00A0 | ⌡ 2321 | ° 00B0 | ² 00B2 | · 00B7 | ÷ 00F7 |
A | ═ 2550 | ║ 2551 | ╒ 2552 | ё 0451 | ╓ 2553 | ╔ 2554 | ╕ 2555 | ╖ 2556 | ╗ 2557 | ╘ 2558 | ╙ 2559 | ╚ 255A | ╛ 255B | ╜ 255C | ╝ 255D | ╞ 255E |
B | ╟ 255F | ╠ 2560 | ╡ 2561 | Ё 0401 | ╢ 2562 | ╣ 2563 | ╤ 2564 | ╥ 2565 | ╦ 2566 | ╧ 2567 | ╨ 2568 | ╩ 2569 | ╪ 256A | ╫ 256B | ╬ 256C | © 00A9 |
C | ю 044E | а 0430 | б 0431 | ц 0446 | д 0434 | е 0435 | ф 0444 | г 0433 | х 0445 | и 0438 | й 0439 | к 043A | л 043B | м 043C | н 043D | о 043E |
D | п 043F | я 044F | р 0440 | с 0441 | т 0442 | у 0443 | ж 0436 | в 0432 | ь 044C | ы 044B | з 0437 | ш 0448 | э 044D | щ 0449 | ч 0447 | ъ 044A |
C | Ю 042E | А 0410 | Б 0411 | Ц 0426 | Д 0414 | Е 0415 | Ф 0424 | Г 0413 | Х 0425 | И 0418 | Й 0419 | К 041A | Л 041B | М 041C | Н 041D | О 041E |
D | П 041F | Я 042F | Р 0420 | С 0421 | Т 0422 | У 0423 | Ж 0416 | В 0412 | Ь 042C | Ы 042B | З 0417 | Ш 0428 | Э 042D | Щ 0429 | Ч 0427 | Ъ 042A |
Юникод, или Уникод (Unicode) - это стандарт кодирования символов, позволяющий представить знаки практически всех письменных языков.
Чаще всего для обозначения символов Unicode используется запись вида "U+xxxx" (для кодов 0...FFFF), где xxx - шестнадцатеричные цифры. Первая версия Юникода представляла собой кодировку с фиксированным размером символа в 16 бит, то есть общее число кодов было 216 (65536). Отсюда и происходит практика обозначения символов четырьмя шестнадцатеричными цифрами (например, U+0410).
Коды в стандарте Unicode разделены на несколько областей, например:
В дальнейшем было принято решение расширить кодовую область, и коды символов стали рассматриваться не как 16-битные значения, а как абстрактные числа, которые в компьютере могут представляться множеством разных способов. Однако, поскольку в ряде компьютерных систем (например, Windows NT) до изобретения Юникода уже были реализованы 16-битные символы, было решено всё наиболее важное кодировать только в пределах первых 65536 позиций (так наз. Basic Multilingual Plane, BMP). Остальное пространство используется для "дополнительных символов" (Supplementary Characters): систем письма вымерших языков или очень редко используемых китайских иероглифов, математических и музыкальных символов.
Стандарт Юникода содержит семейство кодировок (форм представления или UTF, Unicode Transformation Format): UTF-8, UTF-16, UTF-32 и некоторые другие, которые отличаются между собой способом хранения данных (количество байт на символ, фиксированное или нефиксированное количество байт на символ). Была разработана также форма представления UTF-7 для передачи по семибитным каналам, но из-за несовместимости с ASCII она не получила распространения и не включена в стандарт.
UTF-8 - это представление Юникода, обеспечивающее наилучшую совместимость со старыми системами, использовавшими 8-битные символы. Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст ASCII. И наоборот, в тексте UTF-8 любой байт со значением меньше 128 изображает символ ASCII с тем же кодом. Для совместимости со старыми 16-битными системами была изобретена система UTF-16, где первые 65536 позиций отображаются непосредственно как 16-битные числа, а остальные представляются в виде "суррогатных пар".
В Microsoft Windows NT/2000/XP в основном используется форма UTF-16. В UNIX-подобных операционных системах GNU/Linux, BSD и Mac OS X принята форма UTF-8 для файлов и UTF-32 или UTF-8 для обработки символов в оперативной памяти.
В Юникоде нет русских букв с ударением, но по стандарту их можно делать составными, добавляя символ U+0301 ("combining acute accent") после ударной гласной. Вообще, в Юникоде символы, имеющие дополнительные над- или подстрочные элементы, могут быть представлены в виде построенной по определённым правилам последовательности кодов (составной вариант, composite character) или в виде единого символа (монолитный вариант, precomposed character). Cимволы в Юникоде подразделяются на протяжённые и непротяжённые (бесширинные). Непротяжённые символы при отображении не занимают места в строке. К ним относятся, в частности, знаки ударения и прочие диакритические знаки. Как протяжённые, так и непротяжённые символы имеют собственные коды. Протяжённые символы иначе называются базовыми (base characters), а непротяжённые — модифицирующими (combining characters); причём последние не могут встречаться самостоятельно. Например, символ "a" с ударением может быть представлен как последовательность базового символа "a" (U+0061) и модифицирующего символа U+0301, или как монолитный символ "a" с ударением (U+00C1). Примечание: множество символов из языков с алфавитами на основе кириллицы не имеют монолитных форм.
В Windows служебная программа "Таблица символов" (для вызова наберите "charmap" в командной строке) позволяет вывести на экран таблицу всех символов от U+0000 до U+FFFF, поддерживаемых конкретным шрифтом. Также эта программа позволяет выделять отдельные символы и копировать их в буфер обмена.
В некоторых приложениях, например WordPad и MS Word, работает способ ввода символов по шестнадцатеричному коду: нужно набрать этот код, и нажать Alt+X. Код будет заменён на соответствующий символ. Работает и обратное преобразование: если выделить символ и нажать Alt+X, то этот символ будет заменён на его шестнадцатеричный код.
Кроме того, во многих Windows-приложениях будет работать следующее: если нажать клавишу Alt, и не отпуская её, ввести код на блоке дополнительной цифровой клавиатуры, будет введён соответствующий символ. Таким способом могут вводиться символы различных кодировок по достаточно сложным правилам, которые могут срабатывать по-разному в разных программах, и описаны, например, в статье "Вводим отсутствующие на клавиатуре символы" журнала "Компьютерра" (эту статью можно найти в Интернете).
В HTML все символы могут быть закодированы в числовом обозначении с использованием десятичного (&#DD;) или шестнадцатеричного (&#xHHHH;) кода Unicode. Hапример, буква "Ё": Ё или Ё.
В HTML можно использовать также модифицирующие непротяжённые символы, например, для расстановки ударений. Код:
<span style="font-family:Arial">Ма́ма мы́ла ра́му.</span>
Будет отображён так:
Ма́ма мы́ла ра́му.
Благодарность за предоставленные рецепты и пояснения - участнику сообщества под ником YMP.
Иногда значительные неудобства доставляют тексты, сохранённые в неправильной кодировке.
Например, текст в кодировке КОИ-8, сохранённый в кодировке cp1251, выглядит примерно следующим образом:
оНМЪРХЕ ЯЙПХОРХМЦЮ (МЮОХЯЮМХЪ ЯЙПХОРНБ) ПЮАНРЮЕР ДНБНКЭМН УНПНЬН, ЕЯКХ ОНМХЛЮРЭ ЯЙПХОР ЙЮЙ РЕЮРПЮКЭМШИ ЯЖЕМЮПХИ. уНРЪ ЯЖЕМЮПХИ ЪБКЪЕРЯЪ ХЯВЕПОШБЮЧЫХЛ, ОПНПЮАНРЙЮ ДЕРЮКЕИ ХЯОНКМЕМХЪ НЯРЮБКЕМЮ ДЕИЯРБСЧЫХЛ ЮЙРЕПЮЛ Х ПЕФХЯЯЕПС. й ЯНФЮКЕМХЧ, РЮЙХЛ НАПЮГНЛ МЕКЭГЪ ЯСГХРЭ НОПЕДЕКЕМХЕ ЯЙПХОРНБШУ ЪГШЙНБ: ЛЮМХОСКХПСЪ ОПХКНФЕМХЪЛХ, КЧАНИ ЪГШЙ МХГЬЕЦН СПНБМЪ ЛНФМН ХЯОНКЭГНБЮРЭ ЙЮЙ ЯЙПХОРНБШИ ЪГШЙ!
Чтобы прочитать такой текст, можно проделать следующее:
В некоторых случаях происходят ошибки при копировании текста через буфер обмена из одной программы в другую - вставка может превращать текст в "кракозябры".
Это может происходить из-за того, что приложение, из которого производится копирование, помещает текст в буфер обмена в 8-битной кодировке, а то, в которое происходит вставка, запрашивает его в Юникоде (так делает, например, Блокнот). Windows "идёт навстречу" и перекодирует текст. При копировании в буфер помещается также информация о языке. Это может делать само приложение, а если не делает, то Windows просто смотрит, на какой язык ввода было переключено приложение в момент копирования. Если на русский, то используется страница 1251 и при вставке всё нормально. Но если текст русский, а окно приложения было переключено в английский, кодирование пойдёт через 1252 страницу и вместо русских букв пойдут "кракозябры". В таких случаях может помочь предварительное переключение приложения, из которого производится копирование, на русский.
Обратный случай: русский текст помещён в буфер в Юникоде, когда окно было на английском, а вставляется в 8-битной кодировке. Таблица перекодировки берётся опять не та - 1252. Юникодовских кодов для русских букв там просто нет. Не найдя их, Windows использует подстановочный знак для "неизвестного символа" - отсюда вместо русского текста сплошь вопросительные знаки.
Например, при копировании текста через буфер обмена из некоторых PDF-документов можно получить текст "кракозябрами". При копировании из Adobe Reader текст в буфер помещается как в 8-битной кодировке, так и в Юникоде. Похоже, что Adobe Reader сам его перекодирует до того, как положить в буфер. Локаль буфера он не переключает, она соответствует языку окна. Если приложение, в которое осуществляется вставка, запрашивает текст в 8-битной кодировке, в нём отображается всё нормально, а если в Юникоде - в нём идут "кракозябры". Возможно, в самом PDF-документе содержится информация о том, какую страницу использовать при перекодировке, так как такое происходит, конечно, далеко не во всех PDF-документах. В такой ситуации могут выручить приложения, которые запрашивают текст в 8-битной кодировке, например свободный текстовый редактор AkelPad или PuntoSwitcher с его многокарманным буфером.
Чтобы перенести подобный текст, можно проделать следующее:
Людоговский Александр
Перейти на главную страничку сайта (список статей, файлы для скачивания)
© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.