Главная » 2014 » Май » 16 » Кодировки и наборы символов ASCII
15:19
Кодировки и наборы символов ASCII

Набор символов или кодировка (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 разделены на несколько областей, например:

  • Область от U+0000 до U+007F содержит символы набора ASCII.
  • Область от U+0400 до U+052F содержит символы кириллицы, где символы до U+045F - это собственно кириллица, а далее располагаются исторические буквы и дополнительные буквы для разных языков, использующих кириллицу.

В дальнейшем было принято решение расширить кодовую область, и коды символов стали рассматриваться не как 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апример, буква "Ё":&#x0401; или &#1025;.

В HTML можно использовать также модифицирующие непротяжённые символы, например, для расстановки ударений. Код:

<span style="font-family:Arial">Ма&#x0301;ма мы&#x0301;ла ра&#x0301;му.</span>

Будет отображён так:

Ма́ма мы́ла ра́му.

Разрешение проблем

Благодарность за предоставленные рецепты и пояснения - участнику сообщества под ником YMP.

 

Иногда значительные неудобства доставляют тексты, сохранённые в неправильной кодировке.

Например, текст в кодировке КОИ-8, сохранённый в кодировке cp1251, выглядит примерно следующим образом:

оНМЪРХЕ ЯЙПХОРХМЦЮ (МЮОХЯЮМХЪ ЯЙПХОРНБ) ПЮАНРЮЕР ДНБНКЭМН УНПНЬН,
ЕЯКХ ОНМХЛЮРЭ ЯЙПХОР ЙЮЙ РЕЮРПЮКЭМШИ ЯЖЕМЮПХИ.
уНРЪ ЯЖЕМЮПХИ ЪБКЪЕРЯЪ ХЯВЕПОШБЮЧЫХЛ,
ОПНПЮАНРЙЮ ДЕРЮКЕИ ХЯОНКМЕМХЪ НЯРЮБКЕМЮ ДЕИЯРБСЧЫХЛ ЮЙРЕПЮЛ Х ПЕФХЯЯЕПС.
й ЯНФЮКЕМХЧ, РЮЙХЛ НАПЮГНЛ МЕКЭГЪ ЯСГХРЭ НОПЕДЕКЕМХЕ ЯЙПХОРНБШУ ЪГШЙНБ:
ЛЮМХОСКХПСЪ ОПХКНФЕМХЪЛХ, КЧАНИ ЪГШЙ МХГЬЕЦН СПНБМЪ ЛНФМН ХЯОНКЭГНБЮРЭ ЙЮЙ ЯЙПХОРНБШИ ЪГШЙ!

Чтобы прочитать такой текст, можно проделать следующее:

  1. Перенесите такой текст через буфер обмена в стандартный редактор Блокнот и сохраните его в текстовом файле.
  2. Переименуйте расширение файла в .htm и откройте его двойным щелчком в Internet Explorer.
  3. В Internet Explorer выполните команду меню "Файл" - "Сохранить как" и сохраните в другой файл с расширением .htm. В диалоге "Сохранение веб-страницы" выберите кодировку "Кириллица (KOI8-R)".
  4. Откройте новый файл двойным щелчком в Internet Explorer и выполните команду меню "Вид" - "Кодировка" - "Кириллица (Windows)".

В некоторых случаях происходят ошибки при копировании текста через буфер обмена из одной программы в другую - вставка может превращать текст в "кракозябры".

Это может происходить из-за того, что приложение, из которого производится копирование, помещает текст в буфер обмена в 8-битной кодировке, а то, в которое происходит вставка, запрашивает его в Юникоде (так делает, например, Блокнот). Windows "идёт навстречу" и перекодирует текст. При копировании в буфер помещается также информация о языке. Это может делать само приложение, а если не делает, то Windows просто смотрит, на какой язык ввода было переключено приложение в момент копирования. Если на русский, то используется страница 1251 и при вставке всё нормально. Но если текст русский, а окно приложения было переключено в английский, кодирование пойдёт через 1252 страницу и вместо русских букв пойдут "кракозябры". В таких случаях может помочь предварительное переключение приложения, из которого производится копирование, на русский.

Обратный случай: русский текст помещён в буфер в Юникоде, когда окно было на английском, а вставляется в 8-битной кодировке. Таблица перекодировки берётся опять не та - 1252. Юникодовских кодов для русских букв там просто нет. Не найдя их, Windows использует подстановочный знак для "неизвестного символа" - отсюда вместо русского текста сплошь вопросительные знаки.

Например, при копировании текста через буфер обмена из некоторых PDF-документов можно получить текст "кракозябрами". При копировании из Adobe Reader текст в буфер помещается как в 8-битной кодировке, так и в Юникоде. Похоже, что Adobe Reader сам его перекодирует до того, как положить в буфер. Локаль буфера он не переключает, она соответствует языку окна. Если приложение, в которое осуществляется вставка, запрашивает текст в 8-битной кодировке, в нём отображается всё нормально, а если в Юникоде - в нём идут "кракозябры". Возможно, в самом PDF-документе содержится информация о том, какую страницу использовать при перекодировке, так как такое происходит, конечно, далеко не во всех PDF-документах. В такой ситуации могут выручить приложения, которые запрашивают текст в 8-битной кодировке, например свободный текстовый редактор AkelPad или PuntoSwitcher с его многокарманным буфером.

Чтобы перенести подобный текст, можно проделать следующее:

  1. Перенесите такой текст через буфер обмена в стандартный редактор Блокнот и сохраните его в текстовом файле. В диалоге "Сохранить как" выберите кодировку "Юникод".
  2. Переименуйте расширение файла в .htm и откройте его двойным щелчком в Internet Explorer.
  3. В Internet Explorer выполните команду меню "Файл" - "Сохранить как" и сохраните в другой файл с расширением .htm. В диалоге "Сохранение веб-страницы" выберите кодировку "Западноевропейская (Windows)".
  4. Откройте новый файл двойным щелчком в Internet Explorer и выполните команду меню "Вид" - "Кодировка" - "Кириллица (Windows)".

Людоговский Александр

Просмотров: 2925 | Добавил: Дмытрохан | Теги: ASCII | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Яндекс.Метрика
24 log 24 LOG statistick
счетчик посещений
Если вы видите это,
то ваш браузер устарел
и не поддерживает технологий
CSS 3.0