Какая кодировка русских символов используется в windows

Кракозябры вместо русских букв связаны с неправильной кодировкой текста (ASCII, UTF 8, Windows 1251) и исправить это можно способами описанными в этой статье

Здравствуйте, уважаемые читатели блога KtoNaNovenkogo.ru. Сегодня мы поговорим с вами про то, откуда берутся кракозябры на сайте и в программах, какие кодировки текста существуют и какие из них следует использовать. Подробно рассмотрим историю их развития, начиная от базовой ASCII, а также ее расширенных версий CP866, KOI8-R, Windows 1251 и заканчивая современными кодировками консорциума Юникод UTF 16 и 8.

Кодировка русского языка UTF 8 самая часто встречаемая

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

ASCII — базовая кодировка текста для латиницы

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

Но все же отправной точкой для развития современных кодировок текстов стоит считать знаменитую ASCII (American Standard Code for Information Interchange, которая по-русски обычно произносится как «аски»). Она описывает первые 128 символов из наиболее часто используемых англоязычными пользователями — латинские буквы, арабские цифры и знаки препинания.

Еще в эти 128 знаков, описанных в ASCII, попадали некоторые служебные символы навроде скобок, решеток, звездочек и т.п. Собственно, вы сами можете увидеть их:

Пример кодировки ASCII

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

Но дело в том, что с помощью одного байта информации можно закодировать не 128, а целых 256 различных значений (двойка в степени восемь равняется 256), поэтому вслед за базовой версией Аски появился целый ряд расширенных кодировок ASCII, в которых можно было кроме 128 основных знаков закодировать еще и символы национальной кодировки (например, русской).

Тут, наверное, стоит еще немного сказать про системы счисления, которые используются при описании. Во-первых, как вы все знаете, компьютер работает только с числами в двоичной системе, а именно с нулями и единицами («булева алгебра», если кто проходил в институте или в школе). Один байт состоит из восьми бит, каждый из которых представляет из себя двойку в степени, начиная с нулевой, и до двойки в седьмой:

Преобразование двоичных чисел в шестнадцатиричные при кодировании

Не трудно понять, что всех возможных комбинаций нулей и единиц в такой конструкции может быть только 256. Переводить число из двоичной системы в десятичную довольно просто. Нужно просто сложить все степени двойки, над которыми стоят единички.

В нашем примере это получается 1 (2 в степени ноль) плюс 8 (два в степени 3), плюс 32 (двойка в пятой степени), плюс 64 (в шестой), плюс 128 (в седьмой). Итого получает 233 в десятичной системе счисления. Как видите, все очень просто.

Но если вы присмотритесь к таблице с символами ASCII, то увидите, что они представлены в шестнадцатеричной кодировке. Например, «звездочка» соответствует в Аски шестнадцатеричному числу 2A. Наверное, вам известно, что в шестнадцатеричной системе счисления используются кроме арабских цифр еще и латинские буквы от A (означает десять) до F (означает пятнадцать).

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

Причем, в левой половине байта считать степени нужно будет опять начиная с нулевой, а не так, как показано на скриншоте. В результате, путем нехитрых вычислений, мы получим, что на скриншоте закодировано число E9. Надеюсь, что ход моих рассуждений и разгадка данного ребуса вам оказались понятны. Ну, а теперь продолжим, собственно, говорить про кодировки текста.

Расширенные версии Аски — кодировки CP866 и KOI8-R с псевдографикой

Итак, мы с вами начали говорить про ASCII, которая являлась как бы отправной точкой для развития всех современных кодировок (Windows 1251, юникод, UTF 8).

Изначально в нее было заложено только 128 знаков латинского алфавита, арабских цифр и еще чего-то там, но в расширенной версии появилась возможность использовать все 256 значений, которые можно закодировать в одном байте информации. Т.е. появилась возможность добавить в Аски символы букв своего языка.

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

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

Программа, отображающая этот текст на экране (текстовый редактор, браузер и т.п.), при разборе кода считывает кодировку очередного знака и ищет соответствующую ему векторную форму в нужном файле шрифта, который подключен для отображения данного текстового документа. Все просто и банально.

Значит, чтобы закодировать любой нужный нам символ (например, из национального алфавита), должно быть выполнено два условия — векторная форма этого знака должна быть в используемом шрифте и этот символ можно было бы закодировать в расширенных кодировках ASCII в один байт. Поэтому таких вариантов существует целая куча. Только лишь для кодирования символов русского языка существует несколько разновидностей расширенной Аски.

Например, изначально появилась CP866, в которой была возможность использовать символы русского алфавита и она являлась расширенной версией ASCII.

Т.е. ее верхняя часть полностью совпадала с базовой версией Аски (128 символов латиницы, цифр и еще всякой лабуды), которая представлена на приведенном чуть выше скриншоте, а вот уже нижняя часть таблицы с кодировкой CP866 имела указанный на скриншоте чуть ниже вид и позволяла закодировать еще 128 знаков (русские буквы и всякая там псевдографика):

Русская кодировка CP866

Видите, в правом столбце цифры начинаются с 8, т.к. числа с 0 до 7 относятся к базовой части ASCII (см. первый скриншот). Т.о. русская буква «М» в CP866 будет иметь код 9С (она находится на пересечении соответствующих строки с 9 и столбца с цифрой С в шестнадцатеричной системе счисления), который можно записать в одном байте информации, и при наличии подходящего шрифта с русскими символами эта буква без проблем отобразится в тексте.

Откуда взялось такое количество псевдографики в CP866? Тут все дело в том, что эта кодировка для русского текста разрабатывалась еще в те мохнатые года, когда не было такого распространения графических операционных систем как сейчас. А в Досе, и подобных ей текстовых операционках, псевдографика позволяла хоть как-то разнообразить оформление текстов и поэтому ею изобилует CP866 и все другие ее ровесницы из разряда расширенных версий Аски.

CP866 распространяла компания IBM, но кроме этого для символов русского языка были разработаны еще ряд кодировок, например, к этому же типу (расширенных ASCII) можно отнести KOI8-R:

Пример кодировки русского языка KOI8-R

Принцип ее работы остался тот же самый, что и у описанной чуть ранее CP866 — каждый символ текста кодируется одним единственным байтом. На скриншоте показана вторая половина таблицы KOI8-R, т.к. первая половина полностью соответствует базовой Аски, которая показана на первом скриншоте в этой статье.

Среди особенностей кодировки KOI8-R можно отметить то, что русские буквы в ее таблице идут не в алфавитном порядке, как это, например, сделали в CP866.

Если посмотрите на самый первый скриншот (базовой части, которая входит во все расширенные кодировки), то заметите, что в KOI8-R русские буквы расположены в тех же ячейках таблицы, что и созвучные им буквы латинского алфавита из первой части таблицы. Это было сделано для удобства перехода с русских символов на латинские путем отбрасывания всего одного бита (два в седьмой степени или 128).

Windows 1251 — современная версия ASCII и почему вылезают кракозябры

Дальнейшее развитие кодировок текста было связано с тем, что набирали популярность графические операционные системы и необходимость использования псевдографики в них со временем пропала. В результате возникла целая группа, которая по своей сути по-прежнему являлись расширенными версиями Аски (один символ текста кодируется всего одним байтом информации), но уже без использования символов псевдографики.

Они относились к так называемым ANSI кодировкам, которые были разработаны американским институтом стандартизации. В просторечии еще использовалось название кириллица для варианта с поддержкой русского языка. Примером такой может служить Windows 1251.

Она выгодно отличалась от используемых ранее CP866 и KOI8-R тем, что место символов псевдографики в ней заняли недостающие символы русской типографики (окромя знака ударения), а также символы, используемые в близких к русскому славянских языках (украинскому, белорусскому и т.д.):

Windows 1251

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

Очень часто они вылезали при отправке и получении сообщений по электронной почте, что повлекло за собой создание очень сложных перекодировочных таблиц, которые, собственно, решить эту проблему в корне не смогли, и зачастую пользователи для переписки использовали транслит латинских букв, чтобы избежать пресловутых кракозябров при использовании русских кодировок подобных CP866, KOI8-R или Windows 1251.

По сути, кракозябры, вылазящие вместо русского текста, были результатом некорректного использования кодировки данного языка, которая не соответствовала той, в которой было закодировано текстовое сообщение изначально.

Допустим, если символы, закодированные с помощью CP866, попробовать отобразить, используя кодовую таблицу Windows 1251, то эти самые кракозябры (бессмысленный набор знаков) и вылезут, полностью заменив собой текст сообщения.

Пример кракозябров

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

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

Юникод (Unicode) — универсальные кодировки UTF 8, 16 и 32

Эти тысячи знаков языковой группы юго-восточной Азии никак невозможно было описать в одном байте информации, который выделялся для кодирования символов в расширенных версиях ASCII. В результате был создан консорциум под названием Юникод (Unicode — Unicode Consortium) при сотрудничестве многих лидеров IT индустрии (те, кто производит софт, кто кодирует железо, кто создает шрифты), которые были заинтересованы в появлении универсальной кодировки текста.

Первой вариацией, вышедшей под эгидой консорциума Юникод, была UTF 32. Цифра в названии кодировки означает количество бит, которое используется для кодирования одного символа. 32 бита составляют 4 байта информации, которые понадобятся для кодирования одного единственного знака в новой универсальной кодировке UTF.

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

Но многим странам с языками европейской группы такое огромное количество знаков использовать в кодировке вовсе и не было необходимости, однако при задействовании UTF-32 они ни за что ни про что получали четырехкратное увеличение веса текстовых документов, а в результате и увеличение объема интернет трафика и объема хранимых данных. Это много, и такое расточительство себе никто не мог позволить.

В результате развития Юникода появилась UTF-16, которая получилась настолько удачной, что была принята по умолчанию как базовое пространство для всех символов, которые у нас используются. Она использует два байта для кодирования одного знака. Давайте посмотрим, как это дело выглядит.

В операционной системе Windows вы можете пройти по пути «Пуск» — «Программы» — «Стандартные» — «Служебные» — «Таблица символов». В результате откроется таблица с векторными формами всех установленных у вас в системе шрифтов. Если вы выберете в «Дополнительных параметрах» набор знаков Юникод, то сможете увидеть для каждого шрифта в отдельности весь ассортимент входящих в него символов.

Кстати, щелкнув по любому из них, вы сможете увидеть его двухбайтовый код в формате UTF-16, состоящий из четырех шестнадцатеричных цифр:

Юникод в формате UTF-16

Сколько символов можно закодировать в UTF-16 с помощью 16 бит? 65 536 (два в степени шестнадцать), и именно это число было принято за базовое пространство в Юникоде. Помимо этого существуют способы закодировать с помощью нее и около двух миллионов знаков, но ограничились расширенным пространством в миллион символов текста.

Но даже эта удачная версия кодировки Юникода не принесла особого удовлетворения тем, кто писал, допустим, программы только на английском языке, ибо у них, после перехода от расширенной версии ASCII к UTF-16, вес документов увеличивался в два раза (один байт на один символ в Аски и два байта на тот же самый символ в ЮТФ-16).

Вот именно для удовлетворения всех и вся в консорциуме Unicode было решено придумать кодировку переменной длины. Ее назвали UTF-8. Несмотря на восьмерку в названии, она действительно имеет переменную длину, т.е. каждый символ текста может быть закодирован в последовательность длиной от одного до шести байт.

На практике же в UTF-8 используется только диапазон от одного до четырех байт, потому что за четырьмя байтами кода ничего уже даже теоретически не возможно представить. Все латинские знаки в ней кодируются в один байт, так же как и в старой доброй ASCII.

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

Кириллические же знаки в UTF-8 кодируются в два байта, а, например, грузинские — в три байта. Консорциум Юникод после создания UTF 16 и 8 решил основную проблему — теперь у нас в шрифтах существует единое кодовое пространство. И теперь их производителям остается только исходя из своих сил и возможностей заполнять его векторными формами символов текста. Сейчас в наборы даже эмодзи смайлики добавляют.

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

Кракозябры вместо русских букв — как исправить

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

Для редактирования и создания текстовых файлов лично я использую очень хороший, на мой взгляд, Html и PHP редактор Notepad++. Впрочем, он может подсвечивать синтаксис еще доброй сотни языков программирования и разметки, а также имеет возможность расширения с помощью плагинов. Читайте подробный обзор этой замечательной программы по приведенной ссылке.

В верхнем меню Notepad++ есть пункт «Кодировки», где у вас будет возможность преобразовать уже имеющийся вариант в тот, который используется на вашем сайте по умолчанию:

Как исправить кракозябры в кодировке utf-8

В случае сайта на Joomla 1.5 и выше, а также в случае блога на WordPress следует во избежании появления кракозябров выбирать вариант UTF 8 без BOM. А что такое приставка BOM?

Дело в том, что когда разрабатывали кодировку ЮТФ-16, зачем-то решили прикрутить к ней такую вещь, как возможность записывать код символа, как в прямой последовательности (например, 0A15), так и в обратной (150A). А для того, чтобы программы понимали, в какой именно последовательности читать коды, и был придуман BOM (Byte Order Mark или, другими словами, сигнатура), которая выражалась в добавлении трех дополнительных байтов в самое начало документов.

В кодировке UTF-8 никаких BOM предусмотрено в консорциуме Юникод не было и поэтому добавление сигнатуры (этих самых пресловутых дополнительных трех байтов в начало документа) некоторым программам просто-напросто мешает читать код. Поэтому мы всегда при сохранении файлов в ЮТФ должны выбирать вариант без BOM (без сигнатуры). Таким образом, вы заранее обезопасите себя от вылезания кракозябров.

Что примечательно, некоторые программы в Windows не умеют этого делать (не умеют сохранять текст в ЮТФ-8 без BOM), например, все тот же пресловутый Блокнот Windows. Он сохраняет документ в UTF-8, но все равно добавляет в его начало сигнатуру (три дополнительных байта). Причем эти байты будут всегда одни и те же — читать код в прямой последовательности. Но на серверах из-за этой мелочи может возникнуть проблема — вылезут кракозябры.

Поэтому ни в коем случае не пользуйтесь обычным блокнотом Windows для редактирования документов вашего сайта, если не хотите появления кракозябров. Лучшим и наиболее простым вариантом я считаю уже упомянутый редактор Notepad++, который практически не имеет недостатков и состоит из одних лишь достоинств.

В Notepad ++ при выборе кодировки у вас будет возможность преобразовать текст в кодировку UCS-2, которая по своей сути очень близка к стандарту Юникод. Также в Нотепаде можно будет закодировать текст в ANSI, т.е. применительно к русскому языку это будет уже описанная нами чуть выше Windows 1251. Откуда берется эта информация?

Она прописана в реестре вашей операционной системы Windows — какую кодировку выбирать в случае ANSI, какую выбирать в случае OEM (для русского языка это будет CP866). Если вы установите на своем компьютере другой язык по умолчанию, то и эти кодировки будут заменены на аналогичные из разряда ANSI или OEM для того самого языка.

После того, как вы в Notepad++ сохраните документ в нужной вам кодировке или же откроете документ с сайта для редактирования, то в правом нижнем углу редактора сможете увидеть ее название:

Как узнать тип кодировки текстового документа

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

Вообще, во всех языках гипертекстовой разметки кроме Html используется специальное объявление xml, в котором указывается кодировка текста.

<?xml version="1.0" encoding="windows-1251"?>

Прежде, чем начать разбирать код, браузер узнает, какая версия используется и как именно нужно интерпретировать коды символов этого языка. Но что примечательно, в случае, если вы сохраняете документ в принятом по умолчанию юникоде, то это объявление xml можно будет опустить (кодировка будет считаться UTF-8, если нет BOM или ЮТФ-16, если BOM есть).

В случае же документа языка Html для указания кодировки используется элемент Meta, который прописывается между открывающим и закрывающим тегом Head:

<head>
...
<meta charset="utf-8">
...
</head>

Эта запись довольно сильно отличается от принятой в стандарте в Html 4.01, но полностью соответствует новому внедряемому потихоньку стандарту Html 5, и она будет стопроцентно правильно понята любыми используемыми на текущий момент браузерами.

По идее, элемент Meta с указание кодировки Html документа лучше будет ставить как можно выше в шапке документа, чтобы на момент встречи в тексте первого знака не из базовой ANSI (которые правильно прочитаются всегда и в любой вариации) браузер уже должен иметь информацию о том, как интерпретировать коды этих символов.

Данная статья имеет цель собрать воедино и разобрать принципы и механизм работы кодировок текста, подробно этот механизм разобрать и объяснить. Полезна она будет тем, кто только примерно представляет, что такое кодировки текста и как они работают, чем отличаются друг от друга, почему иногда появляются не читаемые символы, какой принцип кодирования имеют разные кодировки.

Чтобы получить детальное понимание этого вопроса придется прочитать и свести воедино не одну статью и потратить довольно значительное время на это. В данном материале же это все собрано воедино и по идее должно сэкономить время и разбор на мой взгляд получился довольно подробный.

О чем будет под катом: принцип работы одно байтовых кодировок (ASCII, Windows-1251 и т.д.), предпосылки появления Unicode, что такое Unicode, Unicode-кодировки UTF-8, UTF-16, их отличия, принципиальные особенности, совместимость и несовместимость разных кодировок, принципы кодирования символов, практический разбор кодирования и декодирования.

Вопрос с кодировками сейчас конечно уже потерял актуальность, но все же знать как они работают сейчас и как работали раньше и при этом не потратить много времени на это думаю лишним не будет.

Предпосылки Unicode

Начать думаю стоит с того времени когда компьютеризация еще не была так сильно развита и только набирала обороты. Тогда разработчики и стандартизаторы еще не думали, что компьютеры и интернет наберут такую огромную популярность и распространенность. Собственно тогда то и возникла потребность в кодировке текста. В каком то же виде нужно было хранить буквы в компьютере, а он (компьютер) только единицы и нули понимает. Так была разработана одно-байтовая кодировка ASCII (скорее всего она не первая кодировка, но она наиболее распространенная и показательная, по этому ее будем считать за эталонную). Что она из себя представляет? Каждый символ в этой кодировке закодирован 8-ю битами. Несложно посчитать что исходя из этого кодировка может содержать 256 символов (восемь бит, нулей или единиц 28=256).

Первые 7 бит (128 символов 27=128) в этой кодировке были отданы под символы латинского алфавита, управляющие символы (такие как переносы строк, табуляция и т.д.) и грамматические символы. Остальные отводились под национальные языки. То есть получилось что первые 128 символов всегда одинаковые, а если хочешь закодировать свой родной язык пожалуйста, используй оставшуюся емкость. Собственно так и появился огромный зоопарк национальных кодировок. И теперь сами можете представить, вот например я находясь в России беру и создаю текстовый документ, у меня по умолчанию он создается в кодировке Windows-1251 (русская кодировка использующаяся в ОС Windows) и отсылаю его кому то, например в США. Даже то что мой собеседник знает русский язык, ему не поможет, потому что открыв мой документ на своем компьютере (в редакторе с дефолтной кодировкой той же самой ASCII) он увидит не русские буквы, а кракозябры. Если быть точнее, то те места в документе которые я напишу на английском отобразятся без проблем, потому что первые 128 символов кодировок Windows-1251 и ASCII одинаковые, но вот там где я написал русский текст, если он в своем редакторе не укажет правильную кодировку будут в виде кракозябр.

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

Небольшой практикум ASCII

Возможно покажется элементарщиной, но раз уж решил объяснять все и подробно, то это надо.

Вот таблица символов ASCII:

Тут имеем 3 колонки:

  • номер символа в десятичном формате
  • номер символа в шестнадцатиричном формате
  • представление самого символа.

Итак, закодируем строку «ok» (англ.) в кодировке ASCII. Символ «o» (англ.) имеет позицию 111 в десятичном виде и 6F в шестнадцатиричном. Переведем это в двоичную систему — 01101111. Символ «k» (англ.) — позиция 107 в десятеричной и 6B в шестнадцатиричной, переводим в двоичную — 01101011. Итого строка «ok» закодированная в ASCII будет выглядеть так — 01101111 01101011. Процесс декодирования будет обратный. Берем по 8 бит, переводим их в 10-ичную кодировку, получаем номер символа, смотрим по таблице что это за символ.

Unicode

С предпосылками создания общей таблицы для всех в мире символов, разобрались. Теперь собственно, к самой таблице. Unicode — именно эта таблица и есть (это не кодировка, а именно таблица символов). Она состоит из 1 114 112 позиций. Большинство этих позиций пока не заполнены символами, так что вряд ли понадобится это пространство расширять.

Разделено это общее пространство на 17 блоков, по 65 536 символов в каждом. Каждый блок содержит свою группу символов. Нулевой блок — базовый, там собраны наиболее употребляемые символы всех современных алфавитов. Во втором блоке находятся символы вымерших языков. Есть два блока отведенные под частное использование. Большинство блоков пока не заполнены.

Итого емкость символов юникода составляет от 0 до 10FFFF (в шестнадцатиричном виде).

Записываются символы в шестнадцатиричном виде с приставкой «U+». Например первый базовый блок включает в себя символы от U+0000 до U+FFFF (от 0 до 65 535), а последний семнадцатый блок от U+100000 до U+10FFFF (от 1 048 576 до 1 114 111).

Отлично теперь вместо зоопарка национальных кодировок, у нас есть всеобъемлющая таблица, в которой зашифрованы все символы которые нам могут пригодиться. Но тут тоже есть свои недостатки. Если раньше каждый символ был закодирован одним байтом, то теперь он может быть закодирован разным количеством байтов. Например для кодирования всех символов английского алфавита по прежнему достаточно одного байта например тот же символ «o» (англ.) имеет в юникоде номер U+006F, то есть тот же самый номер как и в ASCII — 6F в шестнадцатиричной и 111 в десятеричной. А вот для кодирования символа «U+103D5» (это древнеперсидская цифра сто) — 103D5 в шестнадцатиричной и 66 517 в десятеричной, тут нам потребуется уже три байта.

Решить эту проблему уже должны юникод-кодировки, такие как UTF-8 и UTF-16. Далее речь пойдет про них.

UTF-8

UTF-8 является юникод-кодировкой переменной длинны, с помощью которой можно представить любой символ юникода.

Давайте поподробнее про переменную длину, что это значит? Первым делом надо сказать, что структурной (атомарной) единицей этой кодировки является байт. То что кодировка переменной длинны, значит, что один символ может быть закодирован разным количеством структурных единиц кодировки, то есть разным количеством байтов. Так например латиница кодируется одним байтом, а кириллица двумя байтами.

Немного отступлю от темы, надо написать про совместимость ASCII и UTF

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

Давайте возьмем символ «o»(англ.) из примера про ASCII выше. Помним что в таблице ASCII символов он находится на 111 позиции, в битовом виде это будет 01101111. В таблице юникода этот символ — U+006F что в битовом виде тоже будет 01101111. И теперь так, как UTF — это кодировка переменной длины, то в ней этот символ будет закодирован одним байтом. То есть представление данного символа в обеих кодировках будет одинаково. И так для всего диапазона символов от 0 до 128. То есть если ваш документ состоит из английского текста то вы не заметите разницы если откроете его и в кодировке UTF-8 и UTF-16 и ASCII (прим. в UTF-16 такие символы все равно будут закодированы двумя байтами, по этому вы не увидите разницы, если ваш редактор будет игнорировать нулевые байты), и так до момента пока вы не начнете работать с национальным алфавитом.

Сравним на практике как будет выглядеть фраза «Hello мир» в трех разных кодировках: Windows-1251 (русская кодировка), ISO-8859-1 (кодировка западно-европейских языков), UTF-8 (юникод-кодировка). Суть данного примера состоит в том что фраза написана на двух языках. Посмотрим как она будет выглядеть в разных кодировках.


В кодировке ISO-8859-1 нет таких символов «м», «и» и «р».

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

Будем считать что изначально фраза была записана в кодировке Windows-1251. Исходя из таблицы выше запишем эту фразу в двоичном виде, в кодировке Windows-1251. Для этого нам потребуется всего только перевести из десятеричной или шестнадцатиричной системы (из таблицы выше) символы в двоичную.

01001000 01100101 01101100 01101100 01101111 00100000 11101100 11101000 11110000
Отлично, вот это и есть фраза «Hello мир» в кодировке Windows-1251.

Теперь представим что вы имеете файл с текстом, но не знаете в какой кодировке этот текст. Вы предполагаете что он в кодировке ISO-8859-1 и открываете его в своем редакторе в этой кодировке. Как сказано выше с частью символов все в порядке, они есть в этой кодировке, и даже находятся на тех же местах, но вот с символами из слова «мир» все сложнее. Этих символов в этой кодировке нет, а на их местах в кодировке ISO-8859-1 находятся совершенно другие символы. А конкретно «м» — позиция 236, «и» — 232. «р» — 240. И на этих позициях в кодировке ISO-8859-1 находятся следующие символы позиция 236 — символ «ì», 232 — «è», 240 — «ð»

Значит фраза «Hello мир» закодированная в Windows-1251 и открытая в кодировке ISO-8859-1 будет выглядеть так: «Hello ìèð». Вот и получается что эти две кодировки совместимы лишь частично, и корректно перекодировать строку из одной кодировке в другую не получится, потому что там просто напросто нет таких символов.

Тут и будут необходимы юникод-кодировки, а конкретно в данном случае рассмотрим UTF-8. То что символы в ней могут быть закодированы разным количеством байтов от 1 до 4 мы уже выяснили. Теперь стоит сказать что с помощью UTF могут быть закодированы не только 256 символов, как в двух предыдущих, а вобще все символы юникода

Работает она следующим образом. Первый бит каждого байта кодирующего символ отвечает не за сам символ, а за определение байта. То есть например если ведущий (первый) бит нулевой, то это значит что для кодирования символа используется всего один байт. Что и обеспечивает совместимость с ASCII. Если внимательно посмотрите на таблицу символов ASCII то увидите что первые 128 символов (английский алфавит, управляющие символы и знаки препинания) если их привести к двоичному виду, все начинаются с нулевого бита (будьте внимательны, если будете переводить символы в двоичную систему с помощью например онлайн конвертера, то первый нулевой ведущий бит может быть отброшен, что может сбить с толку).

01001000 — первый бит ноль, значит 1 байт кодирует 1 символ -> «H»

01100101 — первый бит ноль, значит 1 байт кодирует 1 символ -> «e»

Если первый бит не нулевой то символ кодируется несколькими байтами.

Для двухбайтовых символов первые три бита должны быть такие — 110

11010000 10111100 — в начале 110, значит 2 байта кодируют 1 символ. Второй байт в таком случае всегда начинается с 10. Итого отбрасываем управляющие биты (начальные, которые выделены красным и зеленым) и берем все оставшиеся (10000111100), переводим их в шестнадцатиричный вид (043С) -> U+043C в юникоде равно символ «м».

для трех-байтовых символов в первом байте ведущие биты — 1110

11101000 10000111 101010101 — суммируем все кроме управляющих битов и получаем что в 16-ричной равно 103В5, U+103D5 — древнеперситдская цифра сто (10000001111010101)

для четырех-байтовых символов в первом байте ведущие биты — 11110

11110100 10001111 10111111 10111111 — U+10FFFF это последний допустимый символ в таблице юникода (100001111111111111111)

Теперь, при желании, можем записать нашу фразу в кодировке UTF-8.

UTF-16

UTF-16 также является кодировкой переменной длинны. Главное ее отличие от UTF-8 состоит в том что структурной единицей в ней является не один а два байта. То есть в кодировке UTF-16 любой символ юникода может быть закодирован либо двумя, либо четырьмя байтами. Давайте для понятности в дальнейшем пару таких байтов я буду называть кодовой парой. Исходя из этого любой символ юникода в кодировке UTF-16 может быть закодирован либо одной кодовой парой, либо двумя.

Начнем с символов которые кодируются одной кодовой парой. Легко посчитать что таких символов может быть 65 535 (2в16), что полностью совпадает с базовым блоком юникода. Все символы находящиеся в этом блоке юникода в кодировке UTF-16 будут закодированы одной кодовой парой (двумя байтами), тут все просто.

символ «o» (латиница) — 00000000 01101111
символ «M» (кириллица) — 00000100 00011100

Теперь рассмотрим символы за пределами базового юникод диапазона. Для их кодирования потребуется уже две кодовые пары (4 байта). И механизм их кодирования немного сложнее, давайте по порядку.

Для начала введем понятия суррогатной пары. Суррогатная пара — это две кодовые пары используемые для кодирования одного символа (итого 4 байта). Для таких суррогатных пар в таблице юникода отведен специальный диапазон от D800 до DFFF. Это значит, что при преобразовании кодовой пары из байтового вида в шестнадцатиричный вы получаете число из этого диапазона, то перед вами не самостоятельный символ, а суррогатная пара.

Чтобы закодировать символ из диапазона 1000010FFFF (то есть символ для которого нужно использовать более одной кодовой пары) нужно:

  1. из кода символа вычесть 10000(шестнадцатиричное) (это наименьшее число из диапазона 1000010FFFF)
  2. в результате первого пункта будет получено число не больше FFFFF, занимающее до 20 бит
  3. ведущие 10 бит из полученного числа суммируются с D800 (начало диапазона суррогатных пар в юникоде)
  4. следующие 10 бит суммируются с DC00 (тоже число из диапазона суррогатных пар)
  5. после этого получатся 2 суррогатные пары по 16 бит, первые 6 бит в каждой такой паре отвечают за определение того что это суррогат,
  6. десятый бит в каждом суррогате отвечает за его порядок если это 1 то это первый суррогат, если 0, то второй

Разберем это на практике, думаю станет понятнее.

Для примера зашифруем символ, а потом расшифруем. Возьмем древнеперсидскую цифру сто (U+103D5):

  1. 103D510000 = 3D5
  2. 3D5 = 0000000000 1111010101 (ведущие 10 бит получились нулевые приведем это к шестнадцатиричному числу, получим 0 (первые десять), 3D5 (вторые десять))
  3. 0 + D800 = D800 (1101100000000000) первые 6 бит определяют что число из диапазона суррогатных пар десятый бит (справа) нулевой, значит это первый суррогат
  4. 3D5 + DC00 = DFD5 (1101111111010101) первые 6 бит определяют что число из диапазона суррогатных пар десятый бит (справа) единица, значит это второй суррогат
  5. итого данный символ в UTF-16 — 1101100000000000 1101111111010101

Теперь наоборот раскодируем. Допустим что у нас есть вот такой код — 1101100000100010 1101111010001000:

  1. переведем в шестнадцатиричный вид = D822 DE88 (оба значения из диапазона суррогатных пар, значит перед нами суррогатная пара)
  2. 1101100000100010 — десятый бит (справа) нулевой, значит первый суррогат
  3. 1101111010001000 — десятый бит (справа) единица, значит второй суррогат
  4. отбрасываем по 6 бит отвечающих за определение суррогата, получим 0000100010 1010001000 (8A88)
  5. прибавляем 10000 (меньшее число суррогатного диапазона) 8A88 + 10000 = 18A88
  6. смотрим в таблице юникода символ U+18A88 = Tangut Component-649. Компоненты тангутского письма.

Спасибо тем кто смог дочитать до конца, надеюсь было полезно и не очень занудно.

Вот некоторые интересные ссылки по данной теме:
habr.com/ru/post/158895 — полезные общие сведения по кодировкам
habr.com/ru/post/312642 — про юникод
unicode-table.com/ru — сама таблица юникод символов

Ну и собственно куда же без нее
ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4 — юникод
ru.wikipedia.org/wiki/ASCII — ASCII
ru.wikipedia.org/wiki/UTF-8 — UTF-8
ru.wikipedia.org/wiki/UTF-16 — UTF-16



Windows-1251 — набор символов и кодировка, являющаяся стандартной 8-битной кодировкой для всех русских версий Microsoft Windows. Данная кодировка пользуется довольно большой популярностью в восточно-европейских странах. Windows-1251 выгодно отличается от других 8-битных кириллических кодировок (таких как CP866, KOI8-R и ISO 8859-5) наличием практически всех символов, использующихся в традиционной русской типографике для обычного текста (отсутствует только знак ударения). Кириллические символы идут в алфавитном порядке.
Windows-1251 также содержит все символы для близких к русскому языку языков: белорусского, украинского, сербского, македонского и болгарского.
На практике этого оказалось достаточно, чтобы кодировка Windows-1251 закрепилась в интернете вплоть до распространения UTF-8.

Таблица кодов символов Windows-1251

Dec Hex Символ   Dec Hex Символ
000 00 NOP   128 80 Ђ
001 01 SOH   129 81 Ѓ
002 02 STX   130 82
003 03 ETX   131 83 ѓ
004 04 EOT   132 84
005 05 ENQ   133 85
006 06 ACK   134 86
007 07 BEL   135 87
008 08 BS   136 88
009 09 TAB   137 89
010 0A LF   138 8A Љ
011 0B VT   139 8B
012 0C FF   140 8C Њ
013 0D CR   141 8D Ќ
014 0E SO   142 8E Ћ
015 0F SI   143 8F Џ
016 10 DLE   144 90 ђ
017 11 DC1   145 91
018 12 DC2   146 92
019 13 DC3   147 93
020 14 DC4   148 94
021 15 NAK   149 95
022 16 SYN   150 96
023 17 ETB   151 97
024 18 CAN   152 98
025 19 EM   153 99
026 1A SUB   154 9A љ
027 1B ESC   155 9B
028 1C FS   156 9C њ
029 1D GS   157 9D ќ
030 1E RS   158 9E ћ
031 1F US   159 9F џ
032 20 SP   160 A0  
033 21 !   161 A1 Ў
034 22 «   162 A2 ў
035 23 #   163 A3 Ћ
036 24 $   164 A4 ¤
037 25 %   165 A5 Ґ
038 26 &   166 A6 ¦
039 27   167 A7 §
040 28 (   168 A8 Ё
041 29 )   169 A9 ©
042 2A *   170 AA Є
043 2B +   171 AB «
044 2C ,   172 AC ¬
045 2D   173 AD ­
046 2E .   174 AE ®
047 2F /   175 AF Ї
048 30 0   176 B0 °
049 31 1   177 B1 ±
050 32 2   178 B2 І
051 33 3   179 B3 і
052 34 4   180 B4 ґ
053 35 5   181 B5 µ
054 36 6   182 B6
055 37 7   183 B7 ·
056 38 8   184 B8 ё
057 39 9   185 B9
058 3A :   186 BA є
059 3B ;   187 BB »
060 3C <   188 BC ј
061 3D =   189 BD Ѕ
062 3E >   190 BE ѕ
063 3F ?   191 BF ї
064 40 @   192 C0 А
065 41 A   193 C1 Б
066 42 B   194 C2 В
067 43 C   195 C3 Г
068 44 D   196 C4 Д
069 45 E   197 C5 Е
070 46 F   198 C6 Ж
071 47 G   199 C7 З
072 48 H   200 C8 И
073 49 I   201 C9 Й
074 4A J   202 CA К
075 4B K   203 CB Л
076 4C L   204 CC М
077 4D M   205 CD Н
078 4E N   206 CE О
079 4F O   207 CF П
080 50 P   208 D0 Р
081 51 Q   209 D1 С
082 52 R   210 D2 Т
083 53 S   211 D3 У
084 54 T   212 D4 Ф
085 55 U   213 D5 Х
086 56 V   214 D6 Ц
087 57 W   215 D7 Ч
088 58 X   216 D8 Ш
089 59 Y   217 D9 Щ
090 5A Z   218 DA Ъ
091 5B [   219 DB Ы
092 5C   220 DC Ь
093 5D ]   221 DD Э
094 5E ^   222 DE Ю
095 5F _   223 DF Я
096 60 `   224 E0 а
097 61 a   225 E1 б
098 62 b   226 E2 в
099 63 c   227 E3 г
100 64 d   228 E4 д
101 65 e   229 E5 е
102 66 f   230 E6 ж
103 67 g   231 E7 з
104 68 h   232 E8 и
105 69 i   233 E9 й
106 6A j   234 EA к
107 6B k   235 EB л
108 6C l   236 EC м
109 6D m   237 ED н
110 6E n   238 EE о
111 6F o   239 EF п
112 70 p   240 F0 р
113 71 q   241 F1 с
114 72 r   242 F2 т
115 73 s   243 F3 у
116 74 t   244 F4 ф
117 75 u   245 F5 х
118 76 v   246 F6 ц
119 77 w   247 F7 ч
120 78 x   248 F8 ш
121 79 y   249 F9 щ
122 7A z   250 FA ъ
123 7B {   251 FB ы
124 7C |   252 FC ь
125 7D }   253 FD э
126 7E ~   254 FE ю
127 7F DEL   255 FF я

Описание специальных (управляющих) символов

Первоначально управляющие символы таблицы ASCII (диапазон 00-31, плюс 127) были разработаны для того, чтобы управлять устройствами аппаратных средств, таких как телетайп, ввод данных на перфоленту и др.
Управляющие символы (кроме горизонтальной табуляции, перевода строки и возврата каретки) не используются в HTML-документах.

Cпециальные (управляющие) символы

Код Описание
NUL, 00 Null, пустой
SOH, 01 Start Of Heading, начало заголовка
STX, 02 Start of TeXt, начало текста
ETX, 03 End of TeXt, конец текста
EOT, 04 End of Transmission, конец передачи
ENQ, 05 Enquire. Прошу подтверждения
ACK, 06 Acknowledgement. Подтверждаю
BEL, 07 Bell, звонок
BS, 08 Backspace, возврат на один символ назад
TAB, 09 Tab, горизонтальная табуляция
LF, 0A Line Feed, перевод строки
Сейчас в большинстве языков программирования обозначается как n
VT, 0B Vertical Tab, вертикальная табуляция
FF, 0C Form Feed, прогон страницы, новая страница
CR, 0D Carriage Return, возврат каретки
Сейчас в большинстве языков программирования обозначается как r
SO, 0E Shift Out, изменить цвет красящей ленты в печатающем устройстве
SI, 0F Shift In, вернуть цвет красящей ленты в печатающем устройстве обратно
DLE, 10 Data Link Escape, переключение канала на передачу данных
DC1, 11
DC2, 12
DC3, 13
DC4, 14
Device Control, символы управления устройствами
NAK, 15 Negative 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, разделитель юнитов
DEL, 7F Delete, стереть последний символ.

Смотрите также:

URL коды символов ACSII

URL коды символов UTF-8 диапазон от U+0400 до U+04FF

HTML Кодирование URL

Таблица кодов символов кирилицы UTF-8



Отличие utf-8 и windows 1251. Рассмотрим, чем отличаются две кодировки «utf-8 и windows 1251» в теории и на практике. И как победить некоторые проблемы для кириллицы в utf-8!?

  • О кодировках utf-8 и windows 1251

    Самое главное. что нас интересует, как и меня — в чем же отличие кодировок utf-8 и windows 1251. И отличается только кириллица!

    Чем отличаются utf-8 и windows 1251

    UTF-8 — это много-байтовая кодировка, а Windows- 1251 однобайтовая. И более того, отличие только в кириллице.

    Количество байтов кириллицы в UTF-8 будет в 2 раза больше, чем 1). латиницы в UTF-8 и 2). латиницы + кириллицы в Windows- 1251 → пример

    Главное отличие кодировок – это используемый набор символов. В UTF-8 гораздо больше количество символов возможно представить, чем в Windows- 1251. Кодировка Windows- 1251 однобайтовая, т.е. представить в ней можно только 255 символов. Для кириллицы, впрочем, этого вполне достаточно, именно поэтому однобайтовые кодировки до сих пор так массово применяются.

    Что такое кодировка windows 1251

    Windows-1251 – набор символов и кодировка, являющаяся стандартной 8-битной кодировкой для всех русских версий Microsoft Windows. Пользуется довольно большой популярностью. Windows-1251 выгодно отличается от других 8‑битных кириллических кодировок (таких как CP866, KOI8-R и ISO 8859-5) наличием практически всех символов, использующихся в русской типографике для обычного текста; она также содержит все символы для близких к русскому языку языков: украинского, белорусского, сербского и болгарского.

    Что такое кодировка UTF-8

    UTF-8 – в настоящее время распространённая кодировка, реализующая представление Юникода, совместимое с 8-битным кодированием текста. Нашла широкое применение в операционных системах и веб-пространстве. Текст, состоящий только из символов Юникода с номерами меньше 128, при записи в UTF-8 превращается в обычный текст ASCII. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байт.

    Символ в кодировке UTF-8 может кодироваться аж 6 байтами (пока используется только 4 и больше не планируется). Для русского языка, например, символ занимает 2 байта. Все символы, которые есть в таблице символов – поддерживаются этой кодировкой. К примеру, если вам нужен знак копирайта (©), то вам не нужно искать особый шрифт или же изображать символов в графическом формате.

  • Пример вывода текста в кодировках utf-8 латиницы

    Когда и если вы прочитали теорию о разнице кодировок utf-8 и windows 1251 — это уже победа! wall
    смайлы

    А если вы еще и поняли о чем идет речь, то вы вообще Эйнштейн! good
    смайлы, то и смысла особого вам читать дальше нет.

    А для всех остальных продолжим…

    Чем отличается текст в кодировках utf-8 и windows 1251

    Теория — это конечно классно и круто, но как обстоит дело на практике!

    Как показать отличие двух кодировок!?

    У нас на сайте основная кодировка utf-8, и мы не напрягаясь можем посмотреть, что творится с текстом в этой кодировке!

    Нам понадобится какой-то текст на латинице:

    И… нам нужно такое слово, чтобы имело одинаковое количество букв в слове, ну пусть это будет моё имя…

    Пусть это будет слово — «Marat!»

    Далее нам потребуется функция var_dump.

    И выведем прямо здесь вот такую конструкцию :

    var_dump(‘Marat’);

    Результат:

    string(5) «Marat»

    Что мы здесь можем прочитать!?

    Что это строка, и что в ней 5 элементов.

  • Пример вывода текста в кодировках utf-8 кириллицы

    Теперь, проделаем тоже самое со строкой на кириллице:

    У нас все таже кодировка utf-8.

    Но теперь нам понадобится текст на кириллице:

    Пусть это будет слово — «Марат!»

    Опять var_dump.

    И выведем прямо здесь вот такую конструкцию :

    var_dump(‘Марат’);

    Результат:

    string(10) «Марат»

    И что мы здесь видим!?

    Что количество элементов в строке 10… Если вы читали теорию внимательно, то вот вам показатель того, что одна буква состоит из двух символов, а латиницы это не касается…!

    Поэтому, и возникают проблемы с текстом в кодировке utf-8 кириллицы, множество функций тупо не работают.

    Как пример…как-то я задолбался со strtolower в utf-8 для кириллицы, что решил написать собственную функцию strtolower, чтобы каждый раз не городить этажерку из нескольких функций…

  • Пример отличия в кодировках utf-8 и windows 1251

    Если вы поленились прочитать два верхних пункта, то ещё раз выведем результаты вывода текста на латинице и на кириллице с одним количеством букв.

    Результат вывода var_dump(‘Marat’);:
    string(5) «Marat»

    Результат var_dump(‘Марат’);:
    string(10) «Марат»

    Что делать, если функция для кириллицы на utf-8 не работают?

    Поскольку я давно занимаюсь сайтами, то могу сказать, что на самом деле таких случаев не так много, когда нужна какая-то специальная функция для обработки кириллицы на utf-8.

    Но если уж она возникала, то есть несколько вариантов решения!

    Это функции с приставкой «mb_», естественно надо проверять, работает ли она у вас на хостинге.

    Второй вариант, это написать собственную функцию, которая будет работать и для латиницы и кириллицы? как это я показал на функции strtolower

    И третий вариант перекодировать строку из utf-8 в windows 1251

    Рассмотрим, первый попавшийся на ум пример…

    Пусть это будет функция str_split и её аналог mb_str_split

    print_r (str_split(‘Марат’)); выдаст :

    Array

    (

    [0] => �

    [1] => �

    [2] => �

    [3] => �

    [4] => �

    [5] => �

    [6] => �

    [7] => �

    [8] => �

    [9] => �

    )

    print_r (mb_str_split(‘Марат’)); выдаст :

    Что делать, если функция для кириллицы на utf-8 не работают?

    Как видим… полный отстой…

    Мы далее разбирались с этим здесь.

  • Как перекодировать строку из utf-8 в windows 1251

    Итак… есть третий вариант, борьбы с квадратиками(непонимание кодировки) — перекодировать строку из utf-8 в windows 1251:

    iconv(«UTF-8», «windows-1251», $text)

    После того, как вы выполнили все намеченные действия с текстом, возвращаем его в исходную кодировку :

    iconv(«windows-1251», «UTF-8», $text)

    Рассмотрим пример перекодировки текста из UTF-8 в windows-1251 и обратно

    Мы использовали var_dump, и он посчитал не правильно, поскольку просто так, на страницу вывести данные с помощью var_dump нельзя, мы использовали вот такой костыль :

    ob_start();

    var_dump( ‘Марат’ );

    echo ob_get_clean();

    Теперь попробуем перекодировать строку прямо внутри :

    ob_start();

    var_dump(iconv(«UTF-8», «windows-1251», ‘Марат’)) ;

    echo ob_get_clean() ;

    Результат подсчета знаков верный, но видим что слово не было перекодировано обратно :

    string(5) «�����»

    Исправим:

    ob_start();

    var_dump(iconv(«UTF-8», «windows-1251», ‘Марат’)) ;

    echo iconv(«windows-1251», «UTF-8», ob_get_clean());

    Результат :

    string(5) «Марат»

    Итак… вы видели процесс кодировки и перекодировки текста из utf-8 в windows 1251, а потом обратно!


    Вы наверное подумали :

    Что за дичь здесь происходит!? Это не дичь! Когда ты внутри, а не снаружи, то все кажется не простым, а очень простым.

    И чем больше ты в теме, это просто, как есть, пить, дышать… просто не задумываешься…

    Я не говорю, что всегда так, иногда бывает очень трудно какаю-то задачку решить… shootself2
    смайлы

  • Что лучше для кириллицы utf-8 или…

    Интересный поисковый запрос — «Что лучше для кириллицы utf-8 или…«…

    Дело в том, что я выбрал кодировку «utf-8» уже… 14 лет(число динамическое) назад… и… уже сейчас трудно вспомнить, почему именно её… но точно вам могу заявить, что когда-то пользовался «windows-1251″… и у неё были какие-то заморочки, в виде неадекватного вывода информации, что, я волей неволей перешел на «utf-8»

    Какие минусы у utf-8?

    Одна из самых главных проблем «utf-8» — это многобайтовость…

    Да! Это несколько неудобно в самом начале, но для всякой функции, которая не хочет работать с кириллицей, существуют замены.

    В процессе создания сайта у вас может возникнуть несколько проблем, которые вы решите и «тупо» забудете об этом…

    Задумывался ли я о переходе с кодировки utf-8 на другую?

    Смысл задумываться о переходе с кодировки utf-8 на другую, если всё работает так, как нужно!

    Таблица кодов кириллицы в Unicode, UTF-8 и Windows-1251

    Во-первых, напомню, что Юникод — не кодировка, а стандарт кодирования,
    кодировки — это UTF-8, UTF-16 и т.д., но, в силу инерции, разработчики и пользователи часто
    говорят о «кодировке Юникод», имея в виду распространённую именно в их деревне форму представления символов :)

    Во-вторых, на самом деле кодирование там довольно замудрённое, возьмём, скажем русскую заглавную «Ж».

    Представляемые в Юникоде символы кодируются целыми числами без знака, их можно называть «кодами символов Unicode».

    Так, для буквы «Ж» Unicode = 104610 или 041616 или 10000 0101102. Unicode в двоичном виде разбивается на две части: пять левых бит и шесть правых. Левая часть в старших разрядах дополняется до байта признаком 110 двухбайтного кода UTF-8, получаем 11010000. К правой части в старших разрядах приписываются два бита 10 признака продолжения многобайтного кода, получаем 10010110. Окончательно код буквы «Ж» в UTF-8 будет иметь вид
    11010000 100101102 или D0 9616.

    Именно последний код мы увидим в любом 16-ричном вьюере файла, например, создав в текстовом редакторе файл со словом «Жора» и сохранив его в UTF-8 (только не из Блокнотика Windows, который добавит в начало файла 3-байтовую метку BOM):

    просмотр файла в 16-ричном виде из Far Manager

    просмотр файла в 16-ричном виде из Far Manager

    То есть, каждая буква кодируется как бы дважды, сначала в 11-битный Unicode, затем в 16-битный UTF-8.

    Ниже приведена таблица кодов кириллицы в Unicode, UTF-8 и однобайтовой кодировке Windows-1251.

    Символ Unicode UTF-8 Windows-1251
    16-ричн. 10-тичн. 16-ричн. 10-тичн.
    А 0410

    1040 D090 208 144 192
    Б 0411 1041 D091 208 145 193
    В 0412 1042 D092 208 146 194
    Г 0413 1043 D093 208 147 195
    Д 0414 1044 D094 208 148 196
    Е 0415 1045 D095 208 149 197
    Ж 0416 1046 D096 208 150 198
    З 0417 1047 D097 208 151 199
    И 0418 1048 D098 208 152 200
    Й 0419 1049 D099 208 153 201
    К 041A 1050 D09A 208 154 202
    Л 041B 1051 D09B 208 155 203
    М 041C 1052 D09C 208 156 204
    Н 041D 1053 D09D 208 157 205
    О 041E 1054 D09E 208 158 206
    П 041F 1055 D09F 208 159 207
    Р 0420 1056 D0A0 208 160 208
    С 0421 1057 D0A1 208 161 209
    Т 0422 1058 D0A2 208 162 210
    У 0423 1059 D0A3 208 163 211
    Ф 0424 1060 D0A4 208 164 212
    Х 0425 1061 D0A5 208 165 213
    Ц 0426 1062 D0A6 208 166 214
    Ч 0427 1063 D0A7 208 167 215
    Ш 0428 1064 D0A8 208 168 216
    Щ 0429 1065 D0A9 208 169 217
    Ъ 042A 1066 D0AA 208 170 218
    Ы 042B 1067 D0AB 208 171 219
    Ь 042C 1068 D0AC 208 172 220
    Э 042D 1069 D0AD 208 173 221
    Ю 042E 1070 D0AE 208 174 222
    Я 042F 1071 D0AF 208 175 223
    а 0430 1072 D0B0 208 176 224
    б 0431 1073 D0B1 208 177 225
    в 0432 1074 D0B2 208 178 226
    г 0433 1075 D0B3 208 179 227
    д 0434 1076 D0B4 208 180 228
    е 0435 1077 D0B5 208 181 229
    ж 0436 1078 D0B6 208 182 230
    з 0437 1079 D0B7 208 183 231
    и 0438 1080 D0B8 208 184 232
    й 0439 1081 D0B9 208 185 233
    к 043A 1082 D0BA 208 186 234
    л 043B 1083 D0BB 208 187 235
    м 043C 1084 D0BC 208 188 236
    н 043D 1085 D0BD 208 189 237
    о 043E 1086 D0BE 208 190 238
    п 043F 1087 D0BF 208 191 239
    р 0440 1088 D180 209 128 240
    с 0441 1089 D181 209 129 241
    т 0442 1090 D182 209 130 242
    у 0443 1091 D183 209 131 243
    ф 0444 1092 D184 209 132 244
    х 0445 1093 D185 209 133 245
    ц 0446 1094 D186 209 134 246
    ч 0447 1095 D187 209 135 247
    ш 0448 1096 D188 209 136 248
    щ 0449 1097 D189 209 137 249
    ъ 044A 1098 D18A 209 138 250
    ы 044B 1099 D18B 209 139 251
    ь 044C 1100 D18C 209 140 252
    э 044D 1101 D18D 209 141 253
    ю 044E 1102 D18E 209 142 254
    я 044F 1103 D18F 209 143 255
    Символы вне общего правила
    Ё 0401 1025 D081 208 129 168
    ё 0451 1105 D191 209 145 184

    23.09.2018, 12:37 [76892 просмотра]


    Windows-1251 — набор символов и кодировка, являющаяся стандартной 8-битной кодировкой для всех русских версий Microsoft Windows. Пользуется довольно большой популярностью. Была создана на базе кодировок, использовавшихся в ранних «самопальных» русификаторах Windows в 1990—1991 гг. совместно представителями «Параграфа», «Диалога» и российского отделения Microsoft. Первоначальный вариант кодировки сильно отличался от представленного ниже в таблице (в частности, там было значительное число «белых пятен»).

    Windows-1251 выгодно отличается от других 8‑битных кириллических кодировок (таких как CP866, KOI8-R и ISO 8859-5) наличием практически всех символов, использующихся в русской типографике для обычного текста (отсутствует только значок ударения); она также содержит все символы для близких к русскому языку языков: украинского, белорусского, сербского и болгарского.

    Имеет два недостатка:

    • строчная буква «я» имеет код 0xFF (255 в десятичной системе). Она является «виновницей» ряда неожиданных проблем в программах без поддержки чистого 8-го бита, а также (гораздо более частый случай) использующих этот код как служебный (в CP437 он обозначает «неразрывный пробел», в Windows-1252 — ÿ, оба варианта практически не используются; число же -1, в дополнительном коде длиной 8 бит представляющееся числом 255, часто используется в программировании как специальное значение, например, индикатор конца файла EOF часто представляется значением -1).
    • отсутствуют символы псевдографики, имеющиеся в CP866 и KOI8 (хотя для самих Windows, для которых она предназначена, в них не было нужды, это делало несовместимость двух использовавшихся в них кодировок заметнее).

    Содержание

    • 1 Таблицы
      • 1.1 Кодировка Windows-1251 (синоним CP1251)
      • 1.2 Другие варианты
        • 1.2.1 Кодировка CP1251-k (KazWin, казахская кодировка)
        • 1.2.2 Кодировка Windows-1251 (чувашский вариант)
        • 1.2.3 Татарский вариант
    • 2 Ссылки

    Таблицы

    Нижняя часть таблицы кодировки (латиница) полностью соответствует кодировке ASCII. Числа под буквами обозначают 16-ричный код подходящего символа в Юникоде.

    Кодировка Windows-1251 (синоним CP1251)

    .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
     
    8.
     
    Ђ
    402
    Ѓ
    403

    201A
    ѓ
    453

    201E

    2026

    2020

    2021

    20AC

    2030
    Љ
    409

    2039
    Њ
    40A
    Ќ
    40C
    Ћ
    40B
    Џ
    40F
     
    9.
     
    ђ
    452

    2018

    2019

    201C

    201D

    2022

    2013

    2014
     
    2122
    љ
    459

    203A
    њ
    45A
    ќ
    45C
    ћ
    45B
    џ
    45F
     
    A.
     
     
    A0
    Ў
    40E
    ў
    45E
    Ј
    408
    ¤
    A4
    Ґ
    490
    ¦
    A6
    §
    A7
    Ё
    401
    ©
    A9
    Є
    404
    «
    AB
    ¬
    AC
    ­
    AD
    ®
    AE
    Ї
    407
     
    B.
     
    °
    B0
    ±
    B1
    І
    406
    і
    456
    ґ
    491
    µ
    B5

    B6
    ·
    B7
    ё
    451

    2116
    є
    454
    »
    BB
    ј
    458
    Ѕ
    405
    ѕ
    455
    ї
    457
     
    C.
     
    А
    410
    Б
    411
    В
    412
    Г
    413
    Д
    414
    Е
    415
    Ж
    416
    З
    417
    И
    418
    Й
    419
    К
    41A
    Л
    41B
    М
    41C
    Н
    41D
    О
    41E
    П
    41F
     
    D.
     
    Р
    420
    С
    421
    Т
    422
    У
    423
    Ф
    424
    Х
    425
    Ц
    426
    Ч
    427
    Ш
    428
    Щ
    429
    Ъ
    42A
    Ы
    42B
    Ь
    42C
    Э
    42D
    Ю
    42E
    Я
    42F
     
    E.
     
    а
    430
    б
    431
    в
    432
    г
    433
    д
    434
    е
    435
    ж
    436
    з
    437
    и
    438
    й
    439
    к
    43A
    л
    43B
    м
    43C
    н
    43D
    о
    43E
    п
    43F
     
    F.
     
    р
    440
    с
    441
    т
    442
    у
    443
    ф
    444
    х
    445
    ц
    446
    ч
    447
    ш
    448
    щ
    449
    ъ
    44A
    ы
    44B
    ь
    44C
    э
    44D
    ю
    44E
    я
    44F
    • Таблица основного кода ASCII

    • Таблица расширенного кода ASCII

    Другие варианты

    (Показаны только отличающиеся строки, поскольку всё остальное совпадает)

    Кодировка CP1251-k (KazWin, казахская кодировка)

    .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
     
    8.
     
    Ұ
    4B0
    Ғ
    492

    201A
    ғ
    493

    201E

    2026

    2020

    2021

    20AC

    2030
    Ө
    4E8

    2039
    Ң
    4A2
    Қ
    49A
    Һ
    4BA
    Ү
    4AE
     
    9.
     
    ұ
    4B1

    2018

    2019

    201C

    201D

    2022

    2013

    2014
     
    2122
    ө
    4E9

    203A
    ң
    4A3
    қ
    49B
    һ
    4BB
    ү
    4AF
     
    A.
     
     
    A0
    Ў
    40E
    ў
    45E
    Җ
    496
    ¤
    A4
    Ҳ
    4B2
    ¦
    A6
    §
    A7
    Ё
    401
    ©
    A9
    Є
    404
    «
    AB
    ¬
    AC
    ­
    AD
    ®
    AE
    Ї
    407
     
    B.
     
    °
    B0
    ±
    B1
    І
    406
    і
    456
    ҳ
    4B3
    µ
    B5

    B6
    ·
    B7
    ё
    451

    2116
    є
    454
    »
    BB
    җ
    497
    Ә
    4D8
    ә
    4D9
    ї
    457

    Кодировка Windows-1251 (чувашский вариант)

    .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
     
    8.
     
    Ђ
    402
    Ѓ
    403

    201A
    ѓ
    453

    201E

    2026

    2020

    2021

    20AC

    2030
    Љ
    409

    2039
    Ӑ
    4D0
    Ӗ
    4D6
    Ҫ
    4AA
    Ӳ
    4F2
     
    9.
     
    ђ
    452

    2018

    2019

    201C

    201D

    2022

    2013

    2014
     
    2122
    љ
    459

    203A
    ӑ
    4D1
    ӗ
    4D7
    ҫ
    4AB
    ӳ
    4F3

    Татарский вариант

    Эта кодировка была официально принята в Татарстане в 1996 г.

    .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
     
    8.
     
    Ә
    4D8
    Ѓ
    403

    201A
    ѓ
    453

    201E

    2026

    2020

    2021

    20AC

    2030
    Ө
    4E8

    2039
    Ү
    4AE
    Җ
    496
    Ң
    4A2
    Һ
    4BA
     
    9.
     
    ә
    4D9

    2018

    2019

    201C

    201D

    2022

    2013

    2014
     
    2122
    ө
    4E9

    203A
    ү
    4AF
    җ
    497
    ң
    4A3
    һ
    4BB

    Ссылки

    • Информация о кодировке на Microsoft GlobalDev
    • История создании кодировки в сообщении Игоря Семенюка в эхоконференции SU.LAN от 14 января 1996
    • Юникод-коды символов на unicode.org
    Кодировки символов
    Основы → алфавит • текст ( файл • данные ) • набор символов • конверсия
    Исторические кодировки → Докомп.: семафорная (Макарова) • Морзе • Бодо • МТК-2 Комп.: 6 бит • УПП • RADIX-50 • EBCDIC ( ДКОИ-8 ) • КОИ-7 • ISO 646
    совре-
    менное
    8-битное
    представ-
    ление
    символы → ASCII ( управляющие • печатные ) не-ASCII ( псевдографика )
    8бит. код.стр. Разные →   Кириллица: КОИ-8 • ГОСТ 19768-87 • MacCyrillic
    ISO 8859 → 1(лат.) 2 3 4 5(кир.) 6 7 8 9 10 11 12 13 14 15(€) 16
    Windows → 1250 1251(кир.) 1252 1253 1254 1255 1256 1257 1258 | WGL4
    IBM&DOS → 437 • 850 • 852 • 855 • 866 «альт.» • ( МИК ) • ( НИИ ЭВМ )
    Много-
    байтные
    Традиционные → DBCS ( GB2312 ) • HTML
    Unicode → UTF-16 • UTF-8 • список символов ( кириллица )
    Связанные
    темы →
    интерфейс пользователя • раскладка клавиатуры • локаль • перевод строки • шрифт • кракозябры • транслит • нестандартные шрифты • текст как изображение Утилиты: iconv • recode

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

    Получаемые данные будут обрабатываться в виде логических единиц и нулей – в двоичной системе. Если числовые символы можно перевести в такую форму представления без проблем, то с кириллицей и другими буквами ситуация обстоит иначе. Буквы не поддерживают перевод в двоичный код. Вместо этого записи сначала преобразовываются в числа по специальной таблице символов. Далее компьютер считывает полученные данные и выдает результат.

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

    Статья расскажет о существующих кодировках, а также поможет понять, как выразить символы кириллицы в UTF-8 и UTF-16.

    Виды кодировок

    Кодировать символы можно разными способами. Ситуация напрямую зависит от того, какая кодировка используется в системе. Существуют различные ее виды. Основные:

    • ASCII;
    • CP866;
    • KOI8-R;
    • Windows 251;
    • Unicode.

    Чаще всего встречаются первая и последняя кодировки. Не все они распознают буквы русского алфавита. Далее каждый вариант будет рассмотрен более подробно. А еще предстоит выяснить, что делать, если при попытке закодировать кириллицу на экране появляются непонятные записи.

    ASCII – базовая кодировка

    ASCII – American Standard Code for Information Interchange. В русском языке произносится как «Аски». Базовая кодировка для работы устройств. Первые 128 ее символов являются наиболее используемыми. Они включают в себя:

    • латинские буквы;
    • цифры (арабские);
    • служебные компоненты;
    • знаки препинания.

    Для кодировки используется один байт. Это привело к тому, что у ASCII появились расширенные версии. Изначально данные таблицы не предоставляли возможность работы с кириллицей и русскими символами. Вместо них на экране появлялись непонятные записи – «кракозябры».


    Выше представлены стандартные таблицы ASCII. В них русского алфавита нет – он не предусмотрен действующими правилами.

    Расширенные ASCII

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

    Первая расширенная версия ASCII – это CP866. В ней реализована первая таблица кодировки русских букв. Верхняя часть CP866 полностью совпадает с базовым «Аски», а нижняя позволяет закодировать кириллицу и некоторые символы, которых нет на клавиатуре.

    Выше расположена кодовая таблица CP866. Она распространялась компанией IBM и использовалась преимущественно в DOS-системах.

    Кириллица с момента образования CP866 стала активно использоваться к компьютерной технике. Это привело к созданию совершенно новых кодировок с русскими символами. Пример – KOI8-R.

    Здесь каждый символ тоже кодируется одним байтом. Первая часть соответствует классической ASCII. Во второй располагаются специальные записи, которых нет на клавиатуре, а также русские буквы.

    KOI8-R отличается тем, что буквы в русского языка в ней располагаются не в алфавитном порядке. Они располагаются по принципу созвучия с латиницей. Данный прием предпринят для того, чтобы было удобнее переходить с кириллицы на латинские буквы, отбрасывая всего один бит.

    Windows 1251

    Дальнейшее развитие кодировок связано с появлением графических операционных систем. Для отображения информации на экране псевдографика стала ненужной. Так возникли группы, которые выступали в качестве расширенных версий ASCII, но являлись более совершенными. Псевдографика в них отсутствовала. Они получили название ANSI.

    Наглядный и весьма распространенный вариант такой кодировки – это Windows 1251. Он отличается от предшественников следующими особенностями:

    1. Вместо псевдографики здесь располагаются недостающие символы кириллицы и русской типографики. Знак ударения – единственное исключение. Его там нет.
    2. На замену псевдографики пришли элементы, приближенные к кириллице – буквы славянских языков.
    3. Первые 32 элемента отведены под операции, перевод строки и пробел.
    4. До 127 элемента расположены интернациональные компоненты, латинский алфавит, знаки препинания и математических действий, цифры.
    5. Оставшееся «пространство» выделено под национальные элементы. Именно они отображают различные мировые алфавиты. 

    Кодовая таблица, представленная выше – часть Windows 1251, отведенная под кириллицу и иные элементы. 

    Unicode

    Unicode – кодировка, которая пользуется наибольшим спросом в современных компьютерных устройствах. Этот стандарт включает в себя почти все знаки существующих письменных языков. Он преобладает в Интернете. Был создан в 1991 году.

    Unicode является многоязычным стандартом, базирующимся на ASCII. Он включает не только кириллицу, но и азиатские иероглифы. Выступает в качестве универсальной кодировки. Включает в себя несколько стандартов.

    UTF-32

    Первая вариация Unicode. Для кодирования одного элемента здесь используются 32 бита или 4 байта. Данная особенность приводит к тому, что закодированный кириллический символ в UTF-32 будет иметь вес в 4 раза больше, чем в ASCII. Несмотря на соответствующий недостаток, система стала предлагать закодировать знаки в количестве 232.

    Все символы в UTF-32 непосредственно индексируемы. Найти тот или иной знак по номеру его позиции в файле удается очень быстро. Это привело к быстрой обработке операций по замене символьных данных.

    UTF-16

    UTF-16 – новый, более совершенный стандарт Unicode. После появления стала выступать базовым пространством для всех используемых печатных элементов. Кириллическая таблица в ней тоже есть.

    Коды символов в UTF-16 содержатся в 16-ричной системе счислений. Увидеть их можно, если перейти в раздел Windows «Таблица символов». Она располагается в меню «Пуск»–«Программы»–«Стандартные»–«Служебные».

    При помощи UTF-16 можно закодировать 65 536 элементов. Это число стало базовым для Unicode. Расширенное пространство включает в себя миллион дополнительных символьных записей.

    При переходе с ASCII на UTF-16 размер исходного кода документа увеличивается уже не в 4, а в 2 раза. Связано это с использованием 2 байтов для кодирования одного и того же символа или шестнадцать бит.

    UTF-8

    Со временем был разработан стандарт UTF-8. В нем тоже есть кириллическая кодовая таблица. Носит название переменной длины. Несмотря на то, что в названии стандарта стоит 8, она действительно меняется. Каждый элемент может получить код длиной от 1 до 6 байт включительно. Практически стандартом используются компоненты до 4 байт. Латинские буквы здесь содержатся в одном байте, как и в ASCII.

    В UTF-8 русские символы занимают по 2 байта, а грузинские – по 3. Текущий стандарт предусматривает возможность печати не только букв, но и смайликов. С UTF-8 хорошо работают даже системы, которые не ориентированы на Unicode. Связано это с тем, что базовая часть ASCII перешла в новый стандарт Юникода.

    Блоки кириллицы

    Unicode, начиная с версии 9.0, для кириллицы отвел пять различных блоков:

    Как называется Диапазон кодов типа hex Версия Unicode
    Cyrillic Стандартная кириллица От 0400 до 04FF 1.1
    Cyrillic Supplement Дополнения От 0500 до 052F 3.2
    Cyrillic Extended-A Расширенная кириллица–А От 2DE0 до 2DFF 5.1
    Extended-B Кириллица расширенного типа–B От A640 до A69F
    Extended-C Кириллица расширенная–C От 1C80 до 1C8F 9.0

    Эти 4 раздела содержатся в кодовом пространстве Unicode 448 позиций. Из них 22 не определены.

    Все символы кириллицы можно разбить на несколько групп:

    • славянские алфавиты;
    • исторические буквы и старославянский (церковный славянский) алфавит;
    • дополнительные буквы для различных языков, использующих кириллицу;
    • церковнославянские буквотипы;
    • дополнительные буквы и символы для церковнославянского языка;
    • элементы для старой орфографии Абхазии;
    • старые формы представления кириллицы.

    Несмотря на относительное совершенство Unicode, при использовании кодировок кириллицы в UTF-8 и других возникают некоторые проблемы. Пример – неоднозначность относительно кодирования некоторых букв. Для того, чтобы привести текст к единому стилю и корректному отображению, приходится определять каждым конкретным стандартом форму нормализации информации.

    Непонятные символы на экране – исправление

    Любая страница данных может быть закодирована не только в ASCII, но и в Unicode. Главное правильно выбрать кодировку для русского текста. Если на экране вместо нормальных текстовых данных отображаются «кракозябры» (или непонятные надписи), значит возникла проблема перекодирования.

    Для редактирования и создания новых текстовых документов можно использовать различные приложения, поддерживающие работу не только с Unicode. Тогда вероятность возникновения ошибок отображения информации будет сведена к минимуму. Пример – Notepad++. Он умеет подсвечивать синтаксис сотен языков программирования и разметки, что станет особо полезным при программировании проектов.

    Чтобы страница, содержащая текст, была приведена от одного стандарта к другому, потребуется:

    1. Выделить текст в Notepad++.
    2. Нажать на кнопку «Кодировка» на верхней панели инструментов.
    3. Выбрать подходящий вариант. Пример – «Преобразовать в UTF-8».

    Желательно выбирать вариант кодировки UTF-8 без BOM для русского языка, отображаемого на странице в документе или на сайте. Этот прием поможет сохранить данные без сигнатуры (добавления лишних трех байтов в самое начало документов).

    Десятичная система

    При преобразовании информации из одной системы счисления (и кодировки) в другую, могут потребоваться ее десятичные значения. Такой вариант используется в ASCII и UTF-32. При помощи него можно перевести символ в удобную для восприятия компьютером форму. А еще – выполнить дальнейшую перекодировку в те или иные системы счисления.

    Десятичная система помогает в Windows вводить различные символы при помощи сочетания с Alt. Для перевода кириллицы в UTF-8 format поможет таблица ниже.



    В Unicode transformation символьных записей производится при помощи целых чисел без знаков. Необходимые преобразования помогут выполнить специализированные сайты-конвертеры. Самостоятельно такие операции практически не используются. Таблицы соответствия и конвертеры сильно облегчают эту задачу.

    Как освоить кодирование информации

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

    Чтобы лучше разобраться в программировании, а также грамотном использовании стандартов кодирования и переводе текста из одной системы в другую, рекомендуется закончить дистанционные онлайн курсы. Они предлагают:

    • постоянное кураторство;
    • домашние задания и интересные практические задачи;
    • возможность освоить инновационные профессии и направления в мире IT в сжатые сроки;
    • помощь в формировании портфолио;
    • разнообразие направлений – есть предложения как для новичков, так и для взрослых.

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

    Хотите стать профессионалом в сфере обработки данных? Добро пожаловать на курсы в Otus:

    • Промышленный ML на больших данных
    • Data Warehouse Analyst
    • Data Engineer

    В начале 90-х, когда произошел развал СССР и границы России были открыты, к нам стали поступать программные продукты западного производства. Естественно, все они были англоязычными. В это же время начинает развиваться Интернет. Остро встала проблема русификации ресурсов и программ. Тогда и была придумана русская кодировка Windows 1251. Она позволяет корректно отображать буквы славянских алфавитов:

    • русского;
    • украинского;
    • белорусского;
    • сербского;
    • болгарского;
    • македонского.

    Разработка велась русским представительством Microsoft совместно с компаниями «Диалог» и «Параграф». За основу были взяты самописные разработки, которые в 1990-91гг имели хождение среди немногочисленных идеологов ИТ в России.

    На сегодняшний день разработан более универсальный способ кодировать символы — UTF-8 (Юникод). В нем представлено почти 90% всех программных и веб-ресурсов. Windows 1251 применяется в 1,6% случаев. (Информация по исследованиям Web Technology Surveys)

    Кодировка сайта utf 8 или Windows 1251?

    Чтобы ответить на этот вопрос, необходимо немного понять, что такое кодировка и чем они отличаются. Текстовая информация, как впрочем, и любая другая, в компьютере хранится в закодированном виде. Нам легче представить ее как числа. Каждый символ может занимать один или более байт. Windows 1251 является однобайтной кодировкой, а UTF-8 восьмибайтной. Это значит, что в Windows 1251 можно закодировать всего 256 символов.
    Так как все сводится к двоичной системе исчисления, а байт – это 8 бит (0 и 1), то и максимальное число сочетаний составляет 28 = 256. Юникод позволяет представлять куда большее число символов, да и на каждый может быть выделен больший размер.

    Отсюда и следуют преимущества Юникода:

    1. В шапке сайта следует указать кодировку, которая используется. Иначе вместо символов отобразятся «кракозяблы». А Юникод является стандартным для всех браузеров – они ловят его «на лету» как установленный по умолчанию.
    2. Символы сайта останутся одними и теми же, независимо от того, в какой стране загружается ресурс. Это зависит не от географического расположения серверов, а от языка программного обеспечения рабочих станций клиента. Житель Португалии, очевидно, использует клавиатуру и все ПО, включая операционную систему, на родном языке. В его компьютере, скорее всего вообще отсутствует Windows 1251. А если это так, то и сайты на русском языке корректно открываться не будут. Юникод, в свою очередь, «зашит» в любую ОС на любом языке.
    3. UTF-8 позволяет закодировать большее количество символов. На данный момент используется 6 байт из 8-ми, а русские символы кодируются двумя байтами.
      Именно поэтому предпочтительней использовать универсальную кодировку, а не узкоспециализированную, которая применяется только в славянских странах.

    Таблица кодировки Windows 1251

    Для программистов и разработчиков сайтов бывает необходимо знать номера символов. Для этого используются специальные таблицы кодировки. Ниже представлена таблица для Windows 1251.

    Что делать, если слетела кодировка командной строки?

    Иногда Вы можете столкнуться с ситуацией, когда в командной строке вместо русских отображаются непонятные символы. Это означает, что возникла проблема кодировки командной строки Windows 7. Почему 7-ка? Потому что, начиная с 8-й версии, используется UTF-8, а в семерке еще Windows 1251.
    Единовременно помочь решить проблему может команда chcp 866. Текущий сеанс будет работать корректно. А вот чтобы исправить ошибку кардинально, понадобится реестр.

    1. Нажмите Win+R и наберите команду regedit. Это позволит попасть в редактор реестра.
    2. Перейдите по ветке HKEY_CURRENT_USERConsole и посмотрите, чему равно значение для CodePage. Скорее всего, вы увидите что-то, отличное от 866 (правильный вариант).
    3. Исправьте на 866 в положении «Десятичная».
    4. Закройте и откройте вновь командную строку. Ситуация должна исправиться.

    Отличного Вам дня!

    Как правило, при совместной работе с текстовыми файлами нет необходимости вникать в технические аспекты хранения текста. Однако если необходимо поделиться файлом с человеком, который работает с текстами на других языках, скачать текстовый файл из Интернета или открыть его на компьютере с другой операционной системой, может потребоваться задать кодировку при его открытии или сохранении.

    Когда вы открываете текстовый файл в Microsoft Word или другой программе (например, на компьютере, язык операционной системы на котором отличается от того, на котором написан текст в файле), кодировка помогает программе определить, в каком виде нужно вывести текст на экран, чтобы его можно было прочитать.

    В этой статье

    • Общие сведения о кодировке текста

    • Выбор кодировки при открытии файла

    • Выбор кодировки при сохранении файла

    • Поиск кодировок, доступных в Word

    Общие сведения о кодировке текста

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

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

    Различные кодировки для разных алфавитов

    Сведения о кодировке, сохраняемые с текстовым файлом, используются компьютером для вывода текста на экран. Например, в кодировке «Кириллица (Windows)» знаку «Й» соответствует числовое значение 201. Когда вы открываете файл, содержащий этот знак, на компьютере, на котором используется кодировка «Кириллица (Windows)», компьютер считывает число 201 и выводит на экран знак «Й».

    Однако если тот же файл открыть на компьютере, на котором по умолчанию используется другая кодировка, на экран будет выведен знак, соответствующий числу 201 в этой кодировке. Например, если на компьютере используется кодировка «Западноевропейская (Windows)», знак «Й» из исходного текстового файла на основе кириллицы будет отображен как «É», поскольку именно этому знаку соответствует число 201 в данной кодировке.

    Юникод: единая кодировка для разных алфавитов

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

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

    К началу страницы

    Выбор кодировки при открытии файла

    Если в открытом файле текст искажен или выводится в виде вопросительных знаков либо квадратиков, возможно, Word неправильно определил кодировку. Вы можете указать кодировку, которую следует использовать для отображения (декодирования) текста.

    1. Откройте вкладку Файл.

    2. Нажмите кнопку Параметры.

    3. Нажмите кнопку Дополнительно.

    4. Перейдите к разделу Общие и установите флажокПодтверждать преобразование формата файла при открытии.

      Примечание: Если установлен этот флажок, Word отображает диалоговое окно Преобразование файла при каждом открытии файла в формате, отличном от формата Word (то есть файла, который не имеет расширения DOC, DOT, DOCX, DOCM, DOTX или DOTM). Если вы часто работаете с такими файлами, но вам обычно не требуется выбирать кодировку, не забудьте отключить этот параметр, чтобы это диалоговое окно не выводилось.

    5. Закройте, а затем снова откройте файл.

    6. В диалоговом окне Преобразование файла выберите пункт Кодированный текст.

    7. В диалоговом окне Преобразование файла установите переключатель Другая и выберите нужную кодировку из списка.

      В области Образец можно просмотреть текст и проверить, правильно ли он отображается в выбранной кодировке.

    Если почти весь текст выглядит одинаково (например, в виде квадратов или точек), возможно, на компьютере не установлен нужный шрифт. В таком случае можно установить дополнительные шрифты.

    Чтобы установить дополнительные шрифты, сделайте следующее:

    1. Нажмите кнопку Пуск и выберите пункт Панель управления.

    2. Выполните одно из указанных ниже действий.

      В Windows 7

      1. На панели управления выберите раздел Удаление программы.

      2. В списке программ щелкните Microsoft Office или Microsoft Word, если он был установлен отдельно от пакета Microsoft Office, и нажмите кнопку Изменить.

      В Windows Vista

      1. На панели управления выберите раздел Удаление программы.

      2. В списке программ щелкните Microsoft Office или Microsoft Word, если он был установлен отдельно от пакета Microsoft Office, и нажмите кнопку Изменить.

      В Windows XP

      1. На панели управления щелкните элемент Установка и удаление программ.

      2. В списке Установленные программы щелкните Microsoft Office или Microsoft Word, если он был установлен отдельно от пакета Microsoft Office, и нажмите кнопку Изменить.

    3. В группе Изменение установки Microsoft Office нажмите кнопку Добавить или удалить компоненты и затем нажмите кнопку Продолжить.

    4. В разделе Параметры установки разверните элемент Общие средства Office, а затем — Многоязыковая поддержка.

    5. Выберите нужный шрифт, щелкните стрелку рядом с ним и выберите пункт Запускать с моего компьютера.

    Совет: При открытии текстового файла в той или иной кодировке в Word используются шрифты, определенные в диалоговом окне Параметры веб-документа. (Чтобы вызвать диалоговое окно Параметры веб-документа, нажмите кнопку Microsoft Office, затем щелкните Параметры Word и выберите категорию Дополнительно. В разделе Общие нажмите кнопку Параметры веб-документа.) С помощью параметров на вкладке Шрифты диалогового окна Параметры веб-документа можно настроить шрифт для каждой кодировки.

    К началу страницы

    Выбор кодировки при сохранении файла

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

    Если документ планируется открывать в программе, которая не поддерживает Юникод, вы можете выбрать нужную кодировку. Например, в операционной системе на английском языке можно создать документ на китайском (традиционное письмо) с использованием Юникода. Однако если такой документ будет открываться в программе, которая поддерживает китайский язык, но не поддерживает Юникод, файл можно сохранить в кодировке «Китайская традиционная (Big5)». В результате текст будет отображаться правильно при открытии документа в программе, поддерживающей китайский язык (традиционное письмо).

    Примечание: Так как Юникод — это наиболее полный стандарт, при сохранении текста в других кодировках некоторые знаки могут не отображаться. Предположим, например, что документ в Юникоде содержит текст на иврите и языке с кириллицей. Если сохранить файл в кодировке «Кириллица (Windows)», текст на иврите не отобразится, а если сохранить его в кодировке «Иврит (Windows)», то не будет отображаться кириллический текст.

    Если выбрать стандарт кодировки, который не поддерживает некоторые символы в файле, Word пометит их красным. Вы можете просмотреть текст в выбранной кодировке перед сохранением файла.

    При сохранении файла в виде кодированного текста из него удаляется текст, для которого выбран шрифт Symbol, а также коды полей.

    Выбор кодировки

    1. Откройте вкладку Файл.

    2. Выберите пункт Сохранить как.

      Чтобы сохранить файл в другой папке, найдите и откройте ее.

    3. В поле Имя файла введите имя нового файла.

    4. В поле Тип файла выберите Обычный текст.

    5. Нажмите кнопку Сохранить.

    6. Если появится диалоговое окно Microsoft Office Word — проверка совместимости, нажмите кнопку Продолжить.

    7. В диалоговом окне Преобразование файла выберите подходящую кодировку.

      • Чтобы использовать стандартную кодировку, выберите параметр Windows (по умолчанию).

      • Чтобы использовать кодировку MS-DOS, выберите параметр MS-DOS.

      • Чтобы задать другую кодировку, установите переключатель Другая и выберите нужный пункт в списке. В области Образец можно просмотреть текст и проверить, правильно ли он отображается в выбранной кодировке.

        Примечание: Чтобы увеличить область отображения документа, можно изменить размер диалогового окна Преобразование файла.

    8. Если появилось сообщение «Текст, выделенный красным, невозможно правильно сохранить в выбранной кодировке», можно выбрать другую кодировку или установить флажок Разрешить подстановку знаков.

      Если разрешена подстановка знаков, знаки, которые невозможно отобразить, будут заменены ближайшими эквивалентными символами в выбранной кодировке. Например, многоточие заменяется тремя точками, а угловые кавычки — прямыми.

      Если в выбранной кодировке нет эквивалентных знаков для символов, выделенных красным цветом, они будут сохранены как внеконтекстные (например, в виде вопросительных знаков).

    9. Если документ будет открываться в программе, в которой текст не переносится с одной строки на другую, вы можете включить в нем жесткие разрывы строк. Для этого установите флажок Вставлять разрывы строк и укажите нужное обозначение разрыва (возврат каретки (CR), перевод строки (LF) или оба значения) в поле Завершать строки.

    К началу страницы

    Поиск кодировок, доступных в Word

    Word распознает несколько кодировок и поддерживает кодировки, которые входят в состав системного программного обеспечения.

    Ниже приведен список письменностей и связанных с ними кодировок (кодовых страниц).

    Система письменности

    Кодировки

    Используемый шрифт

    Многоязычная

    Юникод (UCS-2 с прямым и обратным порядком байтов, UTF-8, UTF-7)

    Стандартный шрифт для стиля «Обычный» локализованной версии Word

    Арабская

    Windows 1256, ASMO 708

    Courier New

    Китайская (упрощенное письмо)

    GB2312, GBK, EUC-CN, ISO-2022-CN, HZ

    SimSun

    Китайская (традиционное письмо)

    BIG5, EUC-TW, ISO-2022-TW

    MingLiU

    Кириллица

    Windows 1251, KOI8-R, KOI8-RU, ISO8859-5, DOS 866

    Courier New

    Английская, западноевропейская и другие, основанные на латинице

    Windows 1250, 1252-1254, 1257, ISO8859-x

    Courier New

    Греческая

    Windows 1253

    Courier New

    Иврит

    Windows 1255

    Courier New

    Японская

    Shift-JIS, ISO-2022-JP (JIS), EUC-JP

    MS Mincho

    Корейская

    Wansung, Johab, ISO-2022-KR, EUC-KR

    Malgun Gothic

    Тайская

    Windows 874

    Tahoma

    Вьетнамская

    Windows 1258

    Courier New

    Индийские: тамильская

    ISCII 57004

    Latha

    Индийские: непальская

    ISCII 57002 (деванагари)

    Mangal

    Индийские: конкани

    ISCII 57002 (деванагари)

    Mangal

    Индийские: хинди

    ISCII 57002 (деванагари)

    Mangal

    Индийские: ассамская

    ISCII 57006

    Индийские: бенгальская

    ISCII 57003

    Индийские: гуджарати

    ISCII 57010

    Индийские: каннада

    ISCII 57008

    Индийские: малаялам

    ISCII 57009

    Индийские: ория

    ISCII 57007

    Индийские: маратхи

    ISCII 57002 (деванагари)

    Индийские: панджаби

    ISCII 57011

    Индийские: санскрит

    ISCII 57002 (деванагари)

    Индийские: телугу

    ISCII 57005

    • Для использования индийских языков необходима их поддержка в операционной системе и наличие соответствующих шрифтов OpenType.

    • Для непальского, ассамского, бенгальского, гуджарати, малаялам и ория доступна только ограниченная поддержка.

    К началу страницы

    Понравилась статья? Поделить с друзьями:
  • Какая операционная система вышла после windows xp
  • Какая кодировка используется в windows для русского языка
  • Какая версия ntfs в windows 10
  • Какая операционная система быстрее windows или linux
  • Какая кодировка в командной строке windows