Учебная страница курса биоинформатики,
год поступления 2017
О кодировках
- Файл на диске и в оперативной памяти хранится в виде последовательностей нулей и единиц.
- Восемь двоичных цифр называют байтом. Всего 256 разных байтов. Их обозначают 0, 1, 2, ..., 255:
- 0 = 00000000
- 1 = 00000001
- 2 = 00000010
- 3 = 00000011
- ............
- 255 = 11111111
- Или так:
- 00 = 00000000
- 01 = 00000001
- 02 = 00000010
- 03 = 00000011
- ............
- 08 = 00001000
- 09 = 00001001
- 0A = 00001010
- 0B = 00001011
- .............
- 0F = 00001111
- 10 = 00010000
- .............
- F0 = 11110000
- .............
- FF = 11111111
- Такая запись называется двузначным шестнадцатиричным числом
В текстовом файле каждому байту соответствует значок, отображаемый программой – редактором текста на экране. Значки разные: буквы маленькие и большие, цифры, знаки препинания, пробел и некоторые другие.
Точнее, почти каждому байту соответствует значок. Есть специальные байты, которые не видны сами, но заставляют редактор показывать следующие значки с новой строки, и некоторые другие.
- При вводе текста с помощью редактора каждой клавише на клавиатуре и многим сочетаниям клавиш соответствует свой байт (например, Shift + A для большой буквы A, большая нижняя клавиша для пробела и т.д.)
Посмотреть на сами байты в файле, а не на значки, в FAR можно Viewer'ом (F3 → F4); байты показываются в виде шестнадцатиричных чисел.
Таблица соответствия байт ⇔ значок называется кодировкой. Первых 128 байтов (с нулём в первой двоичной позиции) хватает, чтобы закодировать знаки, используемые в английском языке, ставшие международным стандартом. Всех 256 байтов хватает для совместного использования русского и английского языков.
Существует несколько кодировок кириллицы: cp1251 – стандартная для Windows, cp866 – старая (времён первых персональных компьютеров с операционной системой MS-DOS), KOI8-R – стандартная для Linux и др.
- Во всех этих кодировках первые 128 байтов соответствуют одним и тем же значкам, а именно, 26 заглавным и 26 строчным латинским буквам и ряду стандартных знаков (цифрам, знакам препинания и др.) Кириллические буквы не входят в число первых 128 байтов.
Придумана универсальная система знаков Юникод. В ней представлены более 1 млн знаков, используемых человечеством. Для кодирования этого огромного кодового пространства одного байта недостаточно. Есть универсальные кодировки, которые используют переменное число байтов на один знак. Одна из таких кодировок – UTF-8. Недостаток – она сложная, преимущество – в ней можно закодировать текст на любом языке.
Если набрать русский текст с помощью клавиатуры, вводящей символы в одной кодировке, а посмотреть на него с помощью редактора, использующего другую кодировку, увидите абракадабру. Наверное, вы видали такое на некоторых веб-страницах или еще где-нибудь
- Бороться можно двумя способами:
- можно указать редактору, какую кодировку использовать;
можно изменить сам текстовый файл – перевести его из одной кодировки в другую. При этом байты изменятся, т.к. в разных кодировках один и тот же знак кодируется разными байтами.
- FAR позволяет переключить кодировку для отображения текста, не изменяя сам файл (F8 или Shift+F8).
Средствами FAR несложно изменить кодировку в файле (Ctrl+A – выделить весь текст, Ctrl+X – убрать в карман, F8 или Shift+F8 для переключения кодировки, Ctrl+V – вставка текста, после этого при сохранении файла он меняется – происходит перекодирование в самом файле).
На веб-страницах кодировка указывается тэгом <META />, например, если кодировка cp1251, стоит вставить в тело тэга <HEAD> такой тэг:
<META http-equiv="Content-Type" content="text/html; charset=windows-1251"/>