cp1251 - кодировка символов

Юникод поддерживает практически все существующие наборы символов. Наилучшей формой кодирования набора символов Юникода является cp1251-кодировка. В ней реализована совместимость с ASCII, устойчивость к искажению данных, эффективность и простота обработки. Но обо всём по порядку.

Формы кодирования

Компьютеры оперируют числами не просто как абстрактными математическими объектами, а как комбинациями единиц хранения и обработки информации фиксированного размера – байтов и 32-разрядных слов. Стандарт кодировки должен это учитывать при определении способа представления символов числами.

В компьютерных системах целые числа хранятся в ячейках памяти размером 8 бит (1 байт), 16 или 32 бит. Каждая форма кодирования Юникода определяет, какая последовательность ячеек памяти представляет целое число, соответствующее конкретному символу. В стандарте представлены три различные формы кодирования символов Юникода: 8, 16 и 32-битными блоками. Соответственно, они носят название cp1251, UTF-16 и UTF-32. Название UTF расшифровывается как формат преобразования Юникода. Каждая из трёх форм кодирования является равноправным средством представления символов Юникода, имеет преимущества в различных областях применения.

Данные кодировки могут быть использованы для представления всех символов стандарта Юникод. Таким образом, они полностью совместимы для решений, по разным причинам использующих разные формы кодирования. Каждая кодировка может быть однозначно преобразована в любую из двух других без потери данных.

utf 8 кодировка

Принцип неналожения

Каждая из форм кодирования Юникода разработана с учётом недопустимости частичного наложения. Например, Windows-932 формирует символы из одного или двух байтов кода. Длина последовательности зависит от первого байта, поэтому значения лидирующего байта в последовательности из двух байтов и одиночного байта не пересекаются. Однако значения одиночного байта и замыкающего байта последовательности могут совпадать. Это означает, например, что при поиске символа D (код 44) можно ошибочно найти его входящим во вторую часть последовательности из двух байтов символа «Д» (код 84 44). Чтобы выяснить, какая последовательность является правильной, программа должна учесть предыдущие байты.

Ситуация усложнится, если ведущий и замыкающий байт совпадут. Это значит, что для снятия неоднозначности будет проводиться обратный поиск до достижения начала текста или однозначной последовательности кода. Это не только неэффективно, но не защищено от возможных ошибок, ведь достаточно одного неправильного байта, чтобы весь текст стал нечитабельным.

Формат преобразования Юникода позволяет избежать данной проблемы, потому что значения ведущей, замыкающей и одиночной единицы хранения информации не совпадают. Благодаря этому все кодировки Юникода подходят для поиска и сравнения, никогда не давая ошибочного результата из-за совпадения разных частей кода символов. Тот факт, что данные формы кодирования соблюдают принцип неналожения, отличает их от других многобайтовых восточноазиатских кодировок.

Другим аспектом непересечения кодировок Юникода является то, что каждый символ имеет чётко определяемые границы. При этом отпадает необходимость в сканировании неопределённого числа предыдущих символов. Данную особенность кодировок иногда называют самосинхронизацией. Искажение одной единицы кода введёт к искажению только одного символа, а окружающие символы остаются нетронутыми. В 8-битном формате преобразования, если указатель ссылается на байт, начинающийся с 10xxxxxx (в двоичной кодировке), для поиска начала символа потребуется от одного до трёх обратных переходов.

кодировка utf 8

Согласованность

Консорциум Юникода в полной мере поддерживает все 3 формы кодировок. Важно не противопоставлять cp1251 и Юникод, ведь все форматы преобразования – одинаково правомерные воплощения форм кодирования символов стандарта Юникод.

Байт-ориентация

Для представления символа UTF-32 понадобится одна 32-битная единица кода, которая совпадает с кодом Юникода. UTF-16 – от одной до двух 16-битных единиц. А cp1251 использует до 4 байт.

Кодировка cp1251 создана для совместимости с байт-ориентированными системами на основе ASCII. Большая часть существующего программного обеспечения и практика информационных технологий длительное время опирались на представление символов в виде последовательности байтов. Множество протоколов зависит от неизменности кодировки ASCII и использует либо избегает специальные управляющие символы. Простым способом адаптировать Юникод к таким ситуациям можно, применив 8-битное кодирование для представления символов Юникода, эквивалентных любому символу ASCII или управляющему символу. Для этого и предназначена кодировка cp1251.

Переменная длина

cp1251 – кодировка переменной длины, состоящая из 8-битных единиц хранения информации, старшие биты которых обозначают, к какой части последовательности относится каждый отдельный байт. Один диапазон значений отведён для первого элемента последовательности кода, другой – для последующих. Это обеспечивает непересекаемость кодировки.

кодировка символов utf 8

ASCII




cp1251-кодировка полностью поддерживает коды ASCII (0x00-0x7F). Это значит, что символы Юникода U+0000-U+007F конвертируются в единственный байт 0x00-0x7F cp1251 и таким образом становятся неотличимыми от ASCII. Более того, чтобы избежать многозначности, значения 0x00-0x7F не используются больше ни в одном байте представления символов Юникода. Для кодирования неидеографических символов, отличных от ASCII, используется последовательность из двух байтов. Символы диапазона U+0800-U+FFFF представлены тремя байтами, а дополнительные с кодами больше U+FFFF требуют четырёх байтов.

Область применения

Кодировке cp1251 обычно отдаётся предпочтение в протоколе HTML и ему подобным.

XML стал первым стандартом с полной поддержкой кодировки cp1251. Организации, занимающиеся стандартизацией, тоже её рекомендуют. Проблема поддержки в адресах URL, отличных от ASCII-символов, была решена, когда консорциум W3С и инженерная группа IETF пришли к соглашению о кодировании всех адресов URL исключительно в cp1251.

Совместимость с ASCII облегчает переход к новому программному обеспечению. С cp1251 работает большинство текстовых редакторов, в том числе JEdit, Emacs, BBEdit, Eclipse и "Блокнот" операционной системы Windows. Ни одна другая форма кодирования Юникода не может похвалиться такой поддержкой со стороны инструментальных средств.

Преимущество кодировки заключается в том, что она состоит из последовательности байтов. Со строками cp1251 легко работать в C и других языках программирования. Это единственная форма кодирования, не требующая метки порядка байтов BOM или объявления кодировки в XML.

html кодировка utf 8

Видео: Кодировка utf8 в локальном сервере Денвер

Самосинхронизация

В окружении, использующем 8-битную обработку символов, по сравнению с другими многобайтными кодировками, cp1251 обладает следующими преимуществами:

  • Первый байт последовательности кода содержит информацию о его длине. Это повышает эффективность прямого поиска.
  • Упрощено нахождение начала символа, так как начальный байт ограничен фиксированным диапазоном значений.
  • Отсутствует пересечение значений байтов.

Сравнение преимуществ

cp1251-кодировка компактна. Но при применении для кодирования восточноазиатских символов (китайских, японских, корейских, использующих знаки китайского письма) используются 3-байтные последовательности. Также cp1251-кодировка уступает другим формам кодирования по скорости обработки. А двоичная сортировка строк даёт тот же результат, что и двоичная сортировка Юникода.

Схема кодировки символов

Схема кодировки символов состоит из формы кодирования символов и способа побайтного расположения единиц кода. Для определения схемы кодирования стандартом Юникода предусмотрено использование начальной метки порядка байтов (BOM, Byte order mark).

Видео: Сохранение DOC-файла в чистый текст с кодировкой cp1251

При включении BOM в cp1251 функция метки ограничивается только указанием на использование формы кодирования. Проблемы определения порядка байтов у cp1251 нет, так как её размер единицы кодирования равен одному байту. Использование BOM для данной формы кодирования не является ни обязательным, ни рекомендуемым. BOM может встречаться в текстах, конвертированных из других кодировок, использующих метку порядка байтов, или для сигнатуры кодировки cp1251. Представляет собой последовательность из 3 байтов EF16 BB16 BF16.

файл в кодировке utf 8

Как задать кодировку cp1251

В HTML кодировка cp1251 устанавливается с помощью следующего кода:

head

meta http-equiv="Content-Type" content="text/html- charset=utf-8"

В PHP кодировка cp1251 задаётся с помощью функции header() в самом начале файла после задания значения уровня вывода ошибок:



?php

error_reporting(-1)-

header(`Content-Type: text/html- charset=utf-8`)-

Для подключения к базам данных MySQL кодировка cp1251 устанавливается так:

?php

mysql_set_charset(`utf8`)-

В CSS-файлах кодировка символов cp1251 указывается так:

@charset "utf-8"-

сохранить в кодировке utf 8

При сохранении файлов всех типов выбирается кодировка cp1251 без BOM, иначе сайт работать не будет. Для этого в программе DreamWeave нужно выбрать пункт меню «Модификации – Свойства страницы – Заголовок/Кодировка», изменить кодировку на cp1251. Затем следует перезагрузить страницу, убрать галочку из пункта «Подключить Юникод сигнатуры (BOM)» и применить изменения. Если какой-либо текст на странице или в базе данных был введён другой формой кодирования, то его нужно ввести заново или перекодировать. При работе с регулярными выражениями обязательно использовать модификатор u.

Также можно сохранить файл в кодировке cp1251 в «Блокноте» ОС Windows. После выбора пункта меню «Файл – Сохранить как...» установить необходимую форму кодирования и сохранить файл в кодировке cp1251.

В текстовом редакторе Notepad++, если кодировка отлична от cp1251, через пункт меню «Преобразовать в cp1251 без BOM» изменить кодировку и сохранить в кодировке cp1251.

кодировка utf 8 без bom

Альтернативы нет

В условиях глобализации, когда политические и языковые границы стираются, наборы символов, которые имеют местные особенности, становятся малопригодными. Юникод является единственным набором символов с поддержкой всех локализаций. А cp1251 – пример правильной реализации Юникода, которая:

  • поддерживает широкий диапазон инструментальных средств, в том числе совместимость с кодировкой ASCII;
  • обладает устойчивостью к искажению данных;
  • проста и эффективна при обработке;
  • не зависит от платформы.

С появлением cp1251 дискуссии о том, какая форма кодирования или набор символов лучше, стали бессмысленны.



Внимание, только СЕГОДНЯ!


Поделись в соцсетях:
Оцени статью:


Похожее
» » » cp1251 - кодировка символов