Как кодируют символы текста: Недопустимое название — Викиучебник

Содержание

1.2.1.Кодирование текста — Информатика для вас

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

При выводе символа на экран происходит обратный процесс – декодирование, т.е. преобразование кода символа в его изображение.

При двоичном кодировании текстовой информации для представления символа выделяется 1 байт (8 бит), тогда количество различных символов в наборе (размер таблицы кодирования) будет соответственно равно 28 = 256. Присвоение символу конкретного кода — это вопрос соглашения, которое фиксируется в кодовой таблице.

Международным стандартом на персональных компьютерах является таблица кодировки ASCII (American Standard Code for Information Interchange) с однобайтовыми кодами символов. Все символы такой таблицы пронумерованы от 0 до 255, а каждому номеру соответствует 8-разрядный двоичный код от 00000000 до 11111111.

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

Сейчас существует несколько различных кодовых таблиц для русских букв (КОИ-8, СР-1251, СР-866, Mac, ISO). Причем тексты, созданные в одной кодировке, могут неправильно отображаться в другой, т.к. одному и тому же двоичному коду в различных кодировках поставлены в соответствие различные символы.

В последние годы вместо таблиц ASCII все чаще используется двухбайтовая кодировка (таблица) Unicode. В этой кодировке для каждого символа отводится не один, а два байта, т.е. шестнадцать бит. Таким образом, доступно 65536 (2

16) различных кодов. Этого хватит на латинский алфавит, кириллицу, иврит, африканские и азиатские языки, различные специализированные символы: математические, экономические, технические и многое другое.

Главный недостаток Unicode состоит в том, что все тексты в этой кодировке становятся в два раза длиннее. В настоящее время стандарты ASCII и Unicode мирно сосуществуют.

Как работают кодировки текста. Откуда появляются «кракозябры». Принципы кодирования. Обобщение и детальный разбор

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

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

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

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

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

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

8

=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

Unicode сколько бит на один символ. Кодирование символов. Unicode. ASCII

Этот пост для тех, кто не понимает, что такое UTF-8, но хочет это понять, а доступная документация часто очень обширно освещает этот вопрос. Я попробую здесь описать это так, как сам бы хотел, чтобы раньше мне кто-то так рассказал. Так как часто у меня по поводу UTF-8 была в голове каша.

Несколько простых правил

  1. Итак, UTF-8 — это «обертка» для Unicode. Это не отдельная кодировка символов, это «обертнутый» Unicode. Вы, наверное, знаете Base64 кодировку, или слышали о ней — она может обернуть бинарные данные в печатаемые символы. Дак вот, UTF-8 это такой же Base64 для Unicode, как Base64 для бинарных данных. Это раз. Если вы это поймете, то уже многое станет ясно. И она также, как Base64, признана решить проблему совместимости в символах (Base64 была придумана для email, чтобы передавать файлы почтой, в которой все символы — печатаемые)
  2. Далее, если код работает с UTF-8, то внутри он все равно работает с Unicode кодировками, то есть, где-то глубоко внутри есть таблицы символов именно Unicode символов. Правда, можно не иметь таблиц символов Unicode, если надо просто посчитать, сколько символов в строке, например (см. ниже)
  3. UTF-8 сделан с той целью, чтобы старые программы и сегодняшние компьютеры могли работать нормально с Unicode символами, как со старыми кодировками, типа KOI8, Windows-1251 и т.п.. В UTF-8 нет байтов с нулями, все байты — они либо от 0x01 — 0x7F, как обычный ASCII, либо 0x80 — 0xFF, что также работает под программами, написанными на Си, как и работало бы не с ASCII символами. Правда, для корректной работы с символами программа должна знать Unicode таблицы.
  4. Все, что имеет старший 7-ой бит в байте (если считать биты с нулевого) UTF-8 — часть кодированного потока Unicode.

UTF-8 изнутри

Если вы знаете битовую систему, то вот вам краткая памятка , как кодируется UTF-8:

Системы письма часто развивались одна от другой, заставляя их делиться некоторыми символами, но не все из них. Предположим, вы собираетесь посетить Нидерланды. Вы садитесь в самолет, и через несколько часов вы приедете в Амстердам. Мы все знаем, что его название начинается с буквы А — первой буквы алфавита. Но когда вы смотрите на карту, вы можете найти много других городов. Например, Астана, являющаяся столицей Казахстана. Или если у вас есть карта, которая, оказывается, на русском языке ищет «Астана».

Это первое кириллическое письмо очень похоже на письмо А, не так ли? Но мы знаем, что это не может быть одно и то же письмо — в конце концов, это язык с использованием другого алфавита. Или вы можете оказаться в солнечном Афинах, столице Греции. Но если вы купили греческую карту, вы ищете «Αθήνα». И снова это первое письмо выглядит как А, но мы знаем, что это греческая прописная буква альфа.

Первый байт Unicode символа в UTF-8 начинается с байта, где 7-ой бит всегда единица, и 6-ой бит всегда также единица. При этом в первом байте, если смотреть на биты слева направо (7-ой, 6-ой и так до нулевого), идет столько единиц, сколько байтов, включая первый, идет на кодирование одного Unicode символа. Заканчивается последовательность единиц нулем. А после этого идут биты самого Unicode символа. Остальные биты Unicode символа попадают во второй, или даже в третий байты (максимум три, почему — смотрите чуть ниже). Остальные байты, кроме первого, всегда идут с началом ’10’ и потом 6 битов следующей части Unicode символа.

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

Пример

Например: есть байты 110 10000 и второй 10 011110 . Первый — начинается с ‘110’ — это значит, что раз две единицы — будет два байта UTF-8 потока, и второй байт, как и все остальные, начинается с ’10’. А кодируют эти два байта символ Unicode, который состоит из 10100 битов от первого куска + 101101 от второго, получается -> 10000011110 -> 41E в 16-ричной системе, или U+041E в написании Unicode обозначений. Это символ большая русская О .

Обработка каждой буквы возможно

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

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

Сколько максимум байт на символ?

Также, давайте посмотрим, сколько максимум байт уходит в UTF-8, чтобы закодировать 16 бит кодировки Unicode. Вторые и далее байты всегда максимум могут вместить 6 бит. Значит, если начать с конечных байтов, то два байта уйдут точно (2-ой и третий), а первый должен начинаться с ‘1110’, чтобы закодировать три. Значит первый байт максимум в таком варианте может закодировать первые 4 бита символа Unicode. Получается 4 + 6 + 6 = 16 байт. Выходит, что UTF-8 может иметь либо 2, либо 3 байта на символ Unicode (один не может, так как нет надобности кодировать 6 бит (8 — 2 бита ’10’) — они будут ASCII символом. Именно поэтому первый байт UTF-8 никогда не может начинаться с ’10’).

Например, есть польская буква ±. Если вы наберете его с клавиатуры, вы получите именно этот символ. Результат — это то же самое ±, когда вы смотрите на него, но это совершенно другое с точки зрения кодирования. Почему вы думаете, что это происходит? Каковы способы избежать таких проблем? И что, по вашему мнению, произойдет, если мы будем использовать язык с гораздо более короткой историей поддержки этого стандарта?

Оставайтесь со мной до следующей части. Если вам понравился этот пост, пожалуйста, не забудьте нажать ❤! Большинство программ также должны обрабатывать текст, состоящий из символов. Поскольку компьютеры действительно понимают числа, символы кодируются путем сопоставления каждого символа в заданном скрипте с определенным числом.

Заключение

Кстати, благодаря такой кодировке, можно взять любой байт в потоке, и определить: является ли байт Unicode символом (если 7-ой бит — значит не ASCII), если да, то первый ли он в потоке UTF-8 или не первый (если ’10’, значит не первый), если не первый, то мы можем переместиться назад побайтово, чтобы найти первый код UTF-8 (у которого 6-ой бит будет 1), либо переместится вправо и пропустить все ’10’ байты, чтобы найти следующий символ. Благодаря такой кодировке, программы также могут, не зная Unicode, считать, сколько символов в строке (на основании первого байта UTF-8 вычислить длину символа в байтах). Вообщем, если подумать, кодировка UTF-8 придумана очень грамотно, и в то же время очень эффективно.

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

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

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

На основании одной ячейки информационной ёмкостью 1 бит можно закодировать только 2 различных состояния. Для того чтобы каждый символ, который можно ввести с клавиатуры в латинском регистре, получил свой уникальный двоичный код, требуется 7 бит. На основании последовательности из 7 бит, в соответствии с формулой Хартли, может быть получено N=2 7 =128 различных комбинаций из нулей и единиц, т.е. двоичных кодов. Поставив в соответствие каждому символу его двоичный код, мы получим кодировочную таблицу. Человек оперирует символами, компьютер – их двоичными кодами.

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

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

Для латинской раскладки клавиатуры такая кодировочная таблица одна на весь мир, поэтому текст, набранный с использованием латинской раскладки, будет адекватно отображен на любом компьютере. Эта таблица носит название ASCII (American Standard Code of Information Interchange) по-английски произносится [э́ски], по-русски произносится [а́ски]. Ниже приводится вся таблица ASCII, коды в которой указаны в десятичном виде. По ней можно определить, что когда вы вводите с клавиатуры, скажем, символ “*”, компьютер его воспринимает как код 42(10), в свою очередь 42(10)=101010(2) – это и есть двоичный код символа “*”. Коды с 0 по 31 в этой таблице не задействованы.

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

Таблица символов ASCII

код символ код символ код символ код символ код символ код символ
Пробел . @ P » p
! A Q a q
» B R b r
# C S c s
$ D T d t
% E U e u
& F V f v
» G W g w
( H X h x
) I Y i y
* J Z j z
+ : K [ k {
, ; L \ l |
M ] m }
. n ~
/ ? O _ o DEL

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

Итак, как мы видим, нам нужно знать кодирование, чтобы понять текст, иначе «странные» символы появляются повсюду. В этой кодировке каждый символ в Юникоде идентифицируется 4 байтами. Но это неправда. Этот номер в названии — это минимальный размер одного символа. Все «акцентированные» национальные символы требуют 2 байта. Более экзотическим символам может потребоваться 4 байта.

Что такое примитивные типы данных?

На этом этапе мы упоминали ряд различных кодировок. Вторая часть статьи будет опубликована очень скоро! Переменные — это места для данных, таких как числа, тексты или адреса. Типы могут быть так называемыми примитивными типами данных или произвольно сложными классами. Примитивные типы данных представляют собой группу типов, которые могут использоваться для создания переменных, содержащих числа, одиночные символы или логические значения. Для каждого примитивного типа данных существует также отдельный, так называемый класс-оболочка, который записывает этот тип данных.

К = 2 I = 2 8 = 256,

т. е. для представления текстовой информации можно использовать алфавит мощностью 256 символов.

Суть кодирования заключается в том, что каждому символу ставят в соответствие двоичный код от 00000000 до 11111111 или соответствующий ему десятичный код от 0 до 255.

Необходимо помнить, что в настоящее время для кодировки русских букв используют пять различных кодовых таблиц (КОИ — 8, СР1251, СР866, Мас, ISO), причем тексты, закодированные при помощи одной таблицы, не будут правильно отображаться в другой кодировке. Наглядно это можно представить в виде фрагмента объединенной таблицы кодировки символов.

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

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

Одному и тому же двоичному коду ставится в соответствие различные символы.

Двоичный код Десятичный код КОИ8 СР1251 СР866 Мас ISO
б В Т

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

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

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

Начиная с 1997 г. последние версии Microsoft Office поддерживают новую кодировку. Она называется Unicode (Юникод) . Unicode – это кодировочная таблица, в которой для кодирования каждого символа используется 2 байта, т.е. 16 бит. На основании такой таблицы может быть закодировано N=2 16 =65 536 символов.

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

Двойной тип предоставляет переменные с плавающей запятой размером 8 байт. Точность находится в 15 значимых местах, это называется двойной точностью. Это выражается в выражениях, в основном условие выполняется — или нет. Булевы переменные обычно используются в сочетании с ветвлением, которые мы обсудим в главе о структурах управления.

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

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

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

Для символов кириллицы в Юникоде выделено два диапазона кодов:

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

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

Cyrillic (#0400 — #04FF)

Cyrillic Supplement (#0500 — #052F).

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

Поэтому сейчас на практике больше распространено представление Юникода UTF-8 (Unicode Transformation Format). UTF-8 обеспечивает наилучшую совместимость с системами, использующими 8-битные символы. Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст ASCII. Остальные символы Юникода изображаются последовательностями длиной от 2 до 4 байтов. В целом, так как самые распространенные в мире символы – символы латинского алфавита — в UTF-8 по-прежнему занимают 1 байт, такое кодирование экономичнее, чем чистый Юникод.

Тем временем развитие прошло много. Здесь была идея создания формата, который охватывает все существующие в мире символы — есть один или даже 16-разрядные уровни из 536 разных символов. Вам нужно только знать, как действовать, если вы хотите, чтобы ваши тексты отображались без ошибок. Очень простой пример для разъяснения.

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

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

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

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

Что такое кодировка в компьютере. Кодирование информации

Общие понятия

Определение 1

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

Определение 2

Кодом называют правило отображения одного набора знаков в другом.

Определение 3

Двоичный код – это способ представления информации с помощью двух символов — $0$ и $1$.

Определение 4

Длина кода – количество знаков, используемых для представления кодируемой информации.

Определение 5

Бит — это одна двоичная цифра $0$ или $1$. Одним битом можно закодировать два значения: $1$ или $0$. Двумя битами можно закодировать уже четыре значения: $00$, $01$, $10$, $11$. Тремя битами кодируются $8$ разных значений. Добавление одного бита удваивает количество значений, которое можно закодировать.

Рисунок 1.

Виды кодирования информации

Различают кодирование информации следующих видов:

  • кодирование цвета;
  • кодирование числовой информации;
  • кодирование звуковой информации;
  • кодирование видеозаписи.

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

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

Текстовая информация, как и любая другая, хранится в памяти компьютера в двоичном виде. Для этого каждому ставится в соответствии некоторое неотрицательное число, называемое кодом символа , и это число записывается в память ЭВМ в двоичном виде. Конкретное соотношение между символами и их кодами называется системой кодировки . В персональных компьютерах обычно используется система кодировки ASCII (American Standard Code for Informational Interchange – Американский стандартный код для информационного обмена).

Замечание 1

Разработчики программного обеспечения создали собственные $8$-битные стандарты кодировки текста. За счет дополнительного бита диапазон кодирования в них был расширен до $256$ символов. Чтобы не было путаницы, первые $128$ символов в таких кодировках, как правило, соответствуют стандарту ASCII. Оставшиеся $128$ — реализуют региональные языковые особенности.

Замечание 2

Восьмибитными кодировками, распространенными в нашей стране, являются KOI8, UTF8, Windows-1251 и некоторые другие.

Кодирование цвета

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

Пример 1

Если говорят, что размер изображения составляет, например, $512 х 512$ точек, это значит, что оно представляет собой матрицу, сформированную из $262144$ пикселей (количество пикселей по вертикали, умноженное на количество пикселей по горизонтали).

Пример 2

Прибором, «разбивающим» изображения на пиксели, является любая современная фотокамера (в том числе веб-камера, камера телефона) или сканер. И если в характеристиках камеры значится, например, «$10$ Mega Pixels», значит количество пикселей, на которые эта камера разбивает изображение для записи в двоичном коде, — 10 миллионов. Чем на большее количество пикселей разделено изображение, тем реалистичнее выглядит фотография в декодированном виде (на мониторе или после распечатывания).

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

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

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

Определение 6

Цветовое разнообразие пикселей, из которых состоит изображение, называется глубиной цвета .

Кодирование графической информации

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

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

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

Пример 3

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

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

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

Кодирование числовой информации

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

Замечание 3

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

Кодирование звуковой информации

Определение 7

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

Пример 4

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

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

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

Определение 8

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

Кодирование видеозаписи

Видеозапись состоит из двух компонентов: звукового и графического .

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

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

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

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

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

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

    0 — отсутствие электрического сигнала или сигнал имеет низкий уровень; 1 — наличие сигнала или сигнал имеет высокий уровень.

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

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

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

Кодирование графической информации

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

Растровое изображение представляет собой совокупность точек, используемых для его отображения на экране монитора. Объем растрового изображения определяется как произведение количества точек и информационного объема одной точки, который зависит от количества возможных цветов. Для черно-белого изображения информационный объем одной точки равен 1 биту, так как точка может быть либо черной, либо белой, что можно закодировать двумя цифрами — 0 или 1.

Для кодирования 8 цветов необходимо 3 бита; для 16 цветов — 4 бита; для 6 цветов — 8 битов (1 байт) и т. д.

Кодирование звуковой информации

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

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

Современные звуковые карты обеспечивают 16-битную глубину кодирования звука. В таком случае количество уровней сигнала будет равно 65536.

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

Количество измерений в секунду может лежать в диапазоне от 8000 до 48000, т. е. частота дискретизации аналогового звукового сигнала может принимать значения от 8 до 48 кГц — качество звучания аудио-CD. Следует также учитывать, что возможны как моно-, так и стерео-режимы.

Представление видеоинформации

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

Что представляет собой фильм с точки зрения информатики? Прежде всего, это сочетание звуковой и графической информации. Кроме того, для создания на экране эффекта движения используется дискретная по своей сути технология быстрой смены статических картинок. Исследования показали, что если за одну секунду сменяется более 10-12 кадров, то человеческий глаз воспринимает изменения на них как непрерывные.

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

Существует множество различных форматов представления видеоданных.

В среде Windows, например, уже боле 10 лет (начиная с версии 3.1) применятся формат Video for Windows, базирующийся на универсальных файлых с расширением AVI (Audi o Video Interleave — чередование аудио и видео).

Большое рапространение получила технология под названием DivX (происходит от сокращения слова Digital Video Express). Благодаря DivX удалось достигнуть степени сжатия, позволившей вместить качественную запись полнометражного фильма на один компакт диск — сжать 4,7 Гб DVD-фильма до 650 Мб.

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

Навигатор по способам

1 способ. Двоичное кодирование.

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

Интересно: 10 способов очистить диск С

2 способ. Стенография.

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

3 способ. Синхронизация.

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

4 способ. Run Length Limited — RLL.

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

Интересно: 10 способов защиты файлов от кражи

5 способ. Таблицы перекодировки.

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

6 способ. Матричный способ.

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

А теперь напиши комментарий!

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

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

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

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

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

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

Дискретизация — это преобразование непрерывных изображений и звука в набор дискретных значений, каждому из которых присваивается значение его кода.

Кодирование информации в живых организмах. Генетическая информация определяет строение и развитие живых организмов и передается по наследству. Хранится генетическая информация в клетках организмов в структуре молекул ДНК (дезоксирибонукле-иновой кислоты). Молекулы ДНК состоят из четырех различных составляющих (нуклеотидов), которые образуют генетический алфавит.

Молекула ДНК человека включает в себя около трех миллиардов пар нуклеотидов, и в ней закодирована вся информация об организме человека: его внешность, здоровье или предрасположенность к болезням, способности и т. д.

6. Основные понятия темы «Информация и управление»: числовое и символьное кодирование информации

Кодирование числовой информации.

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

Основной системой счисления для представления чисел в компьютере является двоичная позиционная система счисления.

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

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

10 цифр, 12 знаков препинания, 15 знаков арифметических действий, буквы русского и латинского алфавита, ВСЕГО: 155 символов, что соответствует 8 бит информации.

Единицы измерения информации.

1 байт = 8 бит

1 Кбайт = 1024 байтам

1 Мбайт = 1024 Кбайтам

1 Гбайт = 1024 Мбайтам

1 Тбайт = 1024 Гбайтам

Суть кодирования заключается в том, что каждому символу ставят в соответствие двоичный код от 00000000 до 11111111 или соответствующий ему десятичный код от 0 до 255.

Необходимо помнить, что в настоящее время для кодировки русских букв используют пять различных кодовых таблиц (КОИ — 8, СР1251, СР866, Мас, ISO), причем тексты, закодированные при помощи одной таблицы не будут правильно отображаться в другой

Основным отображением кодирования символов является код ASCII — American Standard Code for Information Interchange- американский стандартный код обмена информацией, который представляет из себя таблицу 16 на 16, где символы закодированы в шестнадцатеричной системе счисления.

одирование символьной (текстовой) информации.

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

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

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

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

Наиболее популярные таблицы перекодировки: ДКОИ-8, ASCII, CP1251, Unicode.

Исторически сложилось, что в качестве длины кода для кодирования символов было выбрано 8 бит или 1 байт. Поэтому чаще всего одному символу текста, хранимому в компьютере, соответствует один байт памяти.

Различных комбинаций из 0 и 1 при длине кода 8 бит может быть 28 = 256, поэтому с помощью одной таблицы перекодировки можно закодировать не более 256 символов. При длине кода в 2 байта (16 бит) можно закодировать 65536 символов.

7.Основные понятия темы «Информация и управление»: графическое кодирование информации.

Кодирование графической информации.

Важным этапом кодирования графического изображения является разбиение его на дискретные элементы (дискретизация).

Основными способами представления графики для ее хранения и обработки с помощью компьютера являются растровые и векторные изображения

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

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

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

Pixel (picture element — элемент рисунка) — минимальная единица изображения, цвет и яркость которой можно задать независимо от остального изображения.

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

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

Для черно-белого изображения код цвета каждого пикселя задается одним битом.

Если рисунок цветной, то для каждой точки задается двоичный код ее цвета.

Поскольку и цвета кодируются в двоичном коде, то если, например, вы хотите использовать 16-цветный рисунок, то для кодирования каждого пикселя вам потребуется 4 бита (16=24), а если есть возможность использовать 16 бит (2 байта) для кодирования цвета одного пикселя, то вы можете передать тогда 216 = 65536 различных цветов. Использование трех байтов (24 битов) для кодирования цвета одной точки позволяет отразить 16777216 (или около 17 миллионов) различных оттенков цвета — так называемый режим “истинного цвета” (True Color). Заметим, что это используемые в настоящее время, но далеко не предельные возможности современных компьютеров.

8 Основные понятия темы «Информация и управление»: алфавит, код

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

Мощность алфавита — количество символов алфавита.
Двоичный алфавит содержит 2 символа, его мощность равна двум.
Сообщения, записанные с помощью символов ASCII, используют алфавит из 256 символов. Сообщения, записанные по системе UNICODE, используют алфавит из 65 536 символов.

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

9 Основные понятия измерения информации: бит, байт, килобайт, мегабайт

Бит, Байт, Килобайт, Мегабайт, Гигабайт – это и есть единицы измерения информации.

Правда, в компьютерных исчислениях в 1 килобайте не 1000 байт, а 1024. Почему столько? Информация в компьютере представлена в двоичном виде и принято считать, что килобайт — это 2 в десятой степени байта или 1024 байт.
Ниже представлены общепринятые единицы.

10 Количественное и качественное измерение информации.

11 Алфавитный и содержательный подходы к измерению информации

Мы познакомились с системами счисления — способами кодирования чисел. Числа дают информацию о количестве предметов. Эта информация должна быть закодирована, представлена в какой-то системе счисления. Какой из известных способов выбрать, зависит от решаемой задачи.
До недавнего времени на компьютерах в основном обрабатывалась числовая и текстовая информация. Но большую часть информации о внешнем мире человек получает в виде изображения и звука. При этом более важным оказывается изображение. Помните пословицу: “Лучше один раз увидеть, чем сто раз услышать”. Поэтому сегодня компьютеры начинают всё активнее работать с изображением и звуком. Способы кодирования такой информации будут обязательно нами рассмотрены.

Двоичное кодирование числовой и текстовой информации.

Любая информация кодируется в ЭВМ с помощью последовательностей двух цифр — 0 и 1. ЭВМ хранит и обрабатывает информацию в виде комбинации электрических сигналов: напряжение 0.4В-0.6В соответствует логическому нулю, а напряжение 2.4В-2.7В — логической единице. Последовательности из 0 и 1 называются двоичными кодами , а цифры 0 и 1 — битами (двоичными разрядами). Такое кодирование информации на компьютере называется двоичным кодированием . Таким образом, двоичное кодирование — это кодирование с минимально возможным числом элементарных символов, кодирование самыми простыми средствами. Тем оно и замечательно с теоретической точки зрения.
Инженеров двоичное кодирование информации привлекает тем, что легко реализуется технически. Электронные схемы для обработки двоичных кодов должны находиться только в одном из двух состояний: есть сигнал/нет сигнала или высокое напряжение/низкое напряжение .
ЭВМ в своей работе оперируют действительными и целыми числами, представленными в виде двух, четырёх, восьми и даже десяти байт. Для представления знака числа при счёте используется дополнительный знаковый разряд , который обычно располагается перед числовыми разрядами. Для положительных чисел значение знакового разряда равно 0, а для отрицательных чисел — 1. Для записи внутреннего представления целого отрицательного числа (-N) необходимо:
1) получить дополнительный код числа N заменой 0 на 1 и 1 на 0;
2) к полученному числу прибавить 1.

Так как одного байта для представления этого числа недостаточно, оно представлено в виде 2 байт или 16 бит, его дополнительный код: 1111101111000101, следовательно, -1082=1111101111000110.
Если бы ПК мог работать только с одиночными байтами, пользы от него было бы немного. Реально ПК работает с числами, которые записываются двумя, четырьмя, восемью и даже десятью байтами.
Начиная с конца 60-х годов компьютеры всё больше стали использоваться для обработки текстовой информации. Для представления текстовой информации обычно используется 256 различных символов, например большие и малые буквы латинского алфавита, цифры, знаки препинания и т.д. В большинстве современных ЭВМ каждому символу соответствует последовательность из восьми нулей и единиц, называемая байтом .
Байт – это восьмиразрядная комбинация нулей и единиц.
При кодировании информации в этих электронно-вычислительных машинах используют 256 разных последовательностей из 8 нулей и единиц, что позволяет закодировать 256 символов. Например большая русская буква «М» имеет код 11101101, буква «И» — код 11101001, буква «Р» — код 11110010. Таким образом, слово «МИР» кодируется последовательностью из 24 бит или 3 байт: 111011011110100111110010.
Количество бит в сообщении называется информационным объёмом сообщения. Это интересно!

Первоначально в ЭВМ использовался лишь латинский алфавит. В нём 26 букв. Так что для обозначения каждой хватило бы пяти импульсов (битов). Но в тексте есть знаки препинания, десятичные цифры и др. Поэтому в первых англоязычных компьютерах байт — машинный слог — включал шесть битов. Затем семь — не только чтобы отличать большие буквы от малых, но и для увеличения числа кодов управления принтерами, сигнальными лампочками и прочим оборудованием. В 1964 году появились мощные IBM-360, в которых окончательно байт стал равен восьми битам. Последний восьмой бит был необходим для символов псевдографики.
Присвоение символу конкретного двоичного кода — это вопрос соглашения, которое фиксируется в кодовой таблице. К сожалению, существует пять различных кодировок русских букв, поэтому тексты, созданные в одной кодировке, не будут правильно отражаться в другой.
Хронологически одним из первых стандартов кодирования русских букв на компьютерах был КОИ8 («Код обмена информацией, 8 битный»). Наиболее распространённая кодировка — это стандартная кириллическая кодировка Microsoft Windows, обозначаемая сокращением СР1251 («СР» означает «Code Page» или «кодовая страница»). Фирма Apple разработала для компьютеров Macintosh собственную кодировку русских букв (Мас). Международная организация по стандартизации (International Standards Organization, ISO) утвердила в качестве стандарта для русского языка кодировку ISO 8859-5. Наконец, появился новый международный стандарт Unicode, который отводит на каждый символ не один байт, а два, и поэтому с его помощью можно закодировать не 256 символов, а целых 65536.
Все эти кодировки продолжают кодовую таблицу стандарта ASCII (Американский стандартный код для информационного обмена), кодирующую 128 символов.

Таблица символов ASCII:

кодсимволкодсимволкодсимволкодсимволкодсимволкодсимвол
32Пробел48.64@80P96»112p
33!49065A81Q97a113q
34»50166B82R98b114r
35#51267C83S99c115s
36$52368D84T100d116t
37%53469E85U101e117u
38&54570F86V102f118v
39»55671G87W103g119w
40(56772H88X104h120x
41)57873I89Y105i121y
42*58974J90Z106j122z
43+59:75K91[107k123{
44,60;76L92\108l124|
456177M93]109m125}
46.110n126~
47/63?79O95_111o127DEL

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

Двоичное кодирование графической информации.

С 80-х годов бурно развивается технология обработки на компьютере графической информации. Компьютерная графика широко используется в компьютерном моделировании в научных исследованиях, компьютерных тренажёрах, компьютерной анимации, деловой графике, играх и т.д.
Графическая информация на экране дисплея представляется в виде изображения, которое формируется из точек (пикселей). Всмотритесь в газетную фотографию, и вы увидите, что она тоже состоит из мельчайших точек. Если это только чёрные и белые точки, то каждую из них можно закодировать 1 битом. Но если на фотографии оттенки, то два бита позволяет закодировать 4 оттенка точек: 00 — белый цвет, 01 — светло-серый, 10 — тёмно-серый, 11 — чёрный. Три бита позволяют закодировать 8 оттенков и т.д.
Количество бит, необходимое для кодирования одного оттенка цвета, называется глубиной цвета.

В современных компьютерах разрешающая способность (количество точек на экране), а также количество цветов зависит от видеоадаптера и может изменяться программно.
Цветные изображения могут иметь различные режимы: 16 цветов, 256 цветов, 65536 цветов (high color ), 16777216 цветов (true color ). На одну точку для режима high color необходимо 16 бит или 2 байта.
Наиболее распространённой разрешающей способностью экрана является разрешение 800 на 600 точек, т.е. 480000 точек. Рассчитаем необходимый для режима high color объём видеопамяти: 2 байт *480000=960000 байт.
Для измерения объёма информации используются и более крупные единицы:


Следовательно, 960000 байт приблизительно равно 937,5 Кбайт. Если человек говорит по восемь часов в день без перерыва, то за 70 лет жизни он наговорит около 10 гигабайт информации (это 5 миллионов страниц — стопка бумаги высотой 500 метров).
Скорость передачи информации — это количество битов, передаваемых в 1 секунду. Скорость передачи 1 бит в 1 секунду называется 1 бод.

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


Двоичное кодирование звуковой информации.

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


При двоичном кодировании аналогового звукового сигнала непрерывный сигнал дискретизируется, т.е. заменяется серией его отдельных выборок — отсчётов. Качество двоичного кодирования зависит от двух параметров: количества дискретных уровней сигнала и количества выборок в секунду. Количество выборок или частота дискретизации в аудиоадаптерах бывает различной: 11 кГц, 22 кГц, 44,1 кГц и др. Если количество уровней равно 65536, то на один звуковой сигнал рассчитано 16 бит (216). 16-разрядный аудиоадаптер точнее кодирует и воспроизводит звук, чем 8-разрядный.
Количество бит, необходимое для кодирования одного уровня звука, называется глубиной звука.
Объём моноаудиофайла (в байтах) определяется по формуле:


При стереофоническом звучании объём аудиофайла удваивается, при квадрофоническом звучании – учетверяется.
По мере усложнения программ и увеличения их функций, а также появления мультимедиа-приложений, растёт функциональный объём программ и данных.7 (= 128) различных комбинаций * ., что означает, что мы можем представлять максимум 128 символов.

Подожди, 7 бит? Но почему не 1 байт (8 бит)?

Последний бит (8-й) используется для предотвращения ошибок в качестве бита четности . Это было актуально много лет назад.

Большинство символов ASCII являются печатными символами алфавита, такими как abc, ABC, 123, ? &! и т. Д. Остальные-это управляющие символы , такие как возврат каретки , подача строки, вкладка и т. Д.

См. Ниже двоичное представление нескольких символов в ASCII:

0100101 -> % (Percent Sign - 37)
1000001 -> A (Capital letter A - 65)
1000010 -> B (Capital letter B - 66)
1000011 -> C (Capital letter C - 67)
0001101 -> Carriage Return (13)

Смотрите полную таблицу ASCII здесь .

ASCII предназначалось только для английского языка.

Что? Почему только английский? Там так много языков!

Потому что центр компьютерной индустрии в то время находился в USA году.7, как раньше (128).

10000010 -> é (e with acute accent - 130)
10100000 -> á (a with acute accent - 160)

Имя для этого «ASCII расширено до 8 бит, а не до 7 бит, поскольку before» можно было бы просто назвать «extended ASCII» или «8-bit ASCII».

Как отметил @Tom в своем комментарии ниже, нет такой вещи, как «, ASCII «, но это простой способ сослаться на этот 8-битный трюк. Существует множество вариантов 8-битной таблицы ASCII, например, ISO 8859-1, также называемой ISO Latin-1 .

Unicode, Подъем

ASCII Extended решает проблему для языков, основанных на латинском алфавите… а как насчет других, нуждающихся в совершенно другом алфавите? Греческий? Русский? Китайцы и им подобные?

Нам понадобился бы совершенно новый набор символов… это рациональное объяснение Unicode. Unicode не содержит каждый символ из каждого языка, но он, безусловно, содержит гигантское количество символов ( см. Эту таблицу ).

Вы не можете сохранить текст на жестком диске, так как «Unicode». Unicode — это абстрактное представление текста. Вам нужно «encode» это абстрактное представление. Вот тут-то и вступает в игру кодировка .

Кодировки: UTF-8 против UTF-16 против UTF-32

Этот ответ довольно хорошо объясняет основы:

  • UTF-8 и UTF-16-кодировки переменной длины.
  • В UTF-8 символ может занимать не менее 8 бит.
  • В UTF-16 длина символа начинается с 16 бит.
  • UTF-32 — это кодировка фиксированной длины в 32 бита.

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

Мнемоника:

  • UTF — 8 : минимум 8 бит.
  • UTF — 16 : минимум 16 бит.
  • UTF — 32 : минимум и максимум 32 бита.

Примечание:

Почему 2^7?

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

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

Двоичное кодирование. Информация и информационные процессы

1. ДВОИЧНОЕ КОДИРОВАНИЕ

ИНФОРМАЦИЯ И
ИНФОРМАЦИОННЫЕ ПРОЦЕССЫ
Код — это система условных знаков для
представления информации.
Кодирование — перевод информации в
удобную для передачи или хранения
форму.
Двоичное кодирование — кодирование
информации при помощи нулей и единиц.
Двоичное кодирование использует
компьютерная техника.
Двоичное кодирование
Алфавит — набор отличных друг от друга символов (знаков),
используемых для представления информации.
Мощность алфавита
— количество входящих в него
0/1
символов (знаков).
истина/
ложь
+/Двоичный
алфавит — алфавит, содержащий
два символа.
Двоичное кодирование — представление информации с
помощью двоичного алфавита.
хорошо/
плохо
Двоичный
алфавит
да/нет
А/Б
Примеры символов двоичного алфавита
Универсальность двоичного
кодирования
С помощью двоичного кода может быть представлена
любая информация.
Двоичное кодирование
универсально,
так как с его помощью
может быть представлена
любая информация
ax2 + bx+ c = 0
d2 = b2 – 4ac
d=0
X = -b/2/a
0111101000101010010101111000000101001110100101010100
1000101010101010010001111101001010010100111010010100

5. КОДИРОВАНИЕ ТЕКСТОВОЙ ИНФОРМАЦИИ.

Двоичное кодирование символов
1 символ = 1 байту = 8 битов
28 = 256 двоичных кодовых
комбинаций
Символ
Порядковый
номер
(десятичный
код)
Двоичный
код
Схема перевода символа произвольного алфавита в двоичный код
Компьютер различает символы по их коду.
Важно, что присвоение символу
конкретного кода – это вопрос соглашения,
которое фиксируется в кодовой таблице.
Соответствие между изображениями символов и кодами
символов устанавливается с помощью кодовых таблиц.
Кодовая таблица
0 – 32 — управляющие символы
ASCII
33 – 127 – латинские буквы, знаки
препинания, цифры, знаки
арифметических операций
128 – 256 – буквы национального
алфавита

8. Кодовые таблицы

ASCII – основа всех стандартов
Windows-1251
КОИ-8
СР-866
UTF-8
Стандарт кодирования символов Unicode.
В Unicode каждый символ кодируется 2 байтами. Такое
количество разрядов позволяет закодировать 65 536
различных символов:
216 = 65 536.

10. Переведи из одной единицы измерения в другую

32 бит — ? Байт — ? Кбайт
0,5 Мб — ? Байт
4096 байт – ? Гбайт
1/16 Кб — ? Бит
5 Гбайт — ? Кбайт
Задача 1. Считая, что каждый символ кодируется одним байтом,
определите, чему равен информационный объём следующего
высказывания Жан-Жака Руссо:
Тысячи путей ведут к заблуждению, к истине — только один.
Решение
В данном тексте 57 символов (с учётом знаков препинания и
пробелов).
Каждый
символ
кодируется
одним
байтом.
Следовательно, информационный объём всего текста — 57 байтов.
Ответ: 57 байтов.
Задача 2. Определите информационный объём слова из 24
символов в кодировке Unicode.
Решение.
I = 24 2 = 48 (байтов)
48 * 8 = 384 бит.
Ответ: 48 байтов или 384 битов.
Задача 3. Выразите в мегабайтах объём текстовой информации в
«Современном словаре иностранных слов» из 740 страниц, если на
одной странице размещается в среднем 60 строк по 80 символов
(включая пробелы). Считайте, что при записи использовалась
кодировка ASCII.
Решение
K = 740 80 60
I -?
Ответ: 3,39 Мбайт.
К = 740 80 60 8 = 28 416 000 бит = 3 552
000 байтов = 3 468,75 Кбайт 3,39 Мбайт.
Задача 4. Автоматическое устройство осуществило перекодировку
информационного сообщения на русском языке, первоначально
записанного в 8-битовом коде, в 16-битовую кодировку Unicode.
При этом информационное сообщение увеличилось на 2048 байтов.
Каков был информационный объём сообщения до перекодировки?
Решение
х — размер сообщения в 8-битной кодировке
2х — размер сообщения в 16-битной кодировке
2х — х = 2048
х = 2048 (байт) = 2 (кб)
Ответ: 2 Кбайта.
Задача 5. Информационное сообщение на русском языке,
первоначально записанное в 8-битовом коде КОИ-8, было
перекодировано в 16-битовую кодировку Unicode. В результате его
объём увеличился на 8000 битов. Найдите информационный объём
сообщения до перекодировки.
Решение
х — размер сообщения в 8-битной кодировке
2х — размер сообщения в 16-битной кодировке
2х — х = 8000
x=8000 (бит)
Задача 6. Текст в кодировке ASCII
Сколько символов в тексте?
занимает
Решение.
4 Кбайта — ? Байтов
4 Кбайта = 4 * 1024 байта = 4096 байтов
1 символ = 1 байт (ASCII)
Ответ: 4096 символов.
4 Кбайта памяти.
Задача 7. Информационное сообщение на русском языке,
первоначально записанное в 8-битовом коде Windows, было
перекодировано в 16-битовую кодировку Unicode. В результате
информационный объём сообщения стал равен 2 Мбайт. Найдите
количество символов в сообщении.
Решение.
При 16 битной кодировке на каждый символ приходится по 16 бит,
объем сообщения равен 2 МБайта, нужно перевести в биты.
2 мбайта= 2*1024 *1024*8 = 16777216 бит
Делим 16777216 на 16 бит, получаем искомое количество символов
16777216/16=1048576
Задача 8. Информационный объём сообщения, записанного в 16битовом коде Unicode, составляет 12 Кбайт. Сколько страниц
занимает это сообщение, если известно, что на каждой странице 64
строки по 32 символа в строке?
Решение.
64*32*16*х=12*1024*8→х=3 страницы

Примеры кодирования | Практическая информатика

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

Кодирование чисел

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

Множество целых чисел, представимых в памяти ЭВМ, ограничено. Диапазон значений зависит от размера области памяти, используемой для размещения чисел. В k-разрядной ячейке может храниться 2k различных значений целых чисел.

Чтобы получить внутреннее представление целого положительного числа N, хранящегося в k-разрядном машинном слове, необходимо:

1)  перевести число N в двоичную систему счисления;
2)  полученный результат дополнить слева незначащими нулями до k разрядов.


Пример

Получить внутреннее представление целого числа 1607 в 2-х байтовой ячейке.

Переведем число в двоичную систему: 160710 = 110010001112. Внутреннее представление этого числа в ячейке будет следующим: 0000 0110 0100 0111.

Для записи внутреннего представления целого отрицательного числа (-N) необходимо:

1)  получить внутреннее представление положительного числа N;
2)  обратный код этого числа заменой 0 на 1 и 1 на 0;
3)  полученному числу прибавить 1.


Пример

Получим внутреннее представление целого отрицательного числа -1607. Воспользуемся результатом предыдущего примера и запишем внутреннее представление положительного числа 1607: 0000 0110 0100 0111. Инвертированием получим обратный код: 1111 1001 1011 1000. Добавим единицу: 1111 1001 1011 1001 — это и есть внутреннее двоичное представление числа -1607.

Формат с плавающей точкой использует представление вещественного числа R в виде произведения мантиссы m на основание системы счисления n в некоторой целой степени p, которую называют порядком: R = m * n p.

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

12.345 = 0.0012345 x 104 = 1234.5 x 10-2 = 0.12345 x 102

Чаще всего в ЭВМ используют нормализованное представление числа в форме с плавающей точкой. Мантисса в таком представлении должна удовлетворять условию: 0.1p <= m < 1p. Иначе говоря, мантисса меньше 1 и первая значащая цифра — не ноль (p — основание системы счисления).

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

Кодирование текста

Множество символов, используемых при записи текста, называется алфавитом. Количество символов в алфавите называется его мощностью.

Для представления текстовой информации в компьютере чаще всего используется алфавит мощностью 256 символов. Один символ из такого алфавита несет 8 бит информации, т. к. 28 = 256. Но 8 бит составляют один байт, следовательно, двоичный код каждого символа занимает 1 байт памяти ЭВМ.

Все символы такого алфавита пронумерованы от 0 до 255, а каждому номеру соответствует 8-разрядный двоичный код от 00000000 до 11111111. Этот код является порядковым номером символа в двоичной системе счисления.

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

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

Стандартными в этой таблице являются только первые 128 символов, т. е. символы с номерами от нуля (двоичный код 00000000) до 127 (01111111). Сюда входят буквы латинского алфавита, цифры, знаки препинания, скобки и некоторые другие символы. Остальные 128 кодов, начиная со 128 (двоичный код 10000000) и кончая 255 (11111111), используются для кодировки букв национальных алфавитов, символов псевдографики и научных символов. О кодировании символов русского алфавита рассказывается в главе «Обработка документов».

Кодирование графической информации

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

Растровые изображения представляют собой однослойную сетку точек, называемых пикселами (pixel, от англ. picture element). Код пиксела содержит информации о его цвете.

Для черно-белого изображения (без полутонов) пиксел может принимать только два значения: белый и черный (светится — не светится), а для его кодирования достаточно одного бита памяти: 1 — белый, 0 — черный.

Пиксел на цветном дисплее может иметь различную окраску, поэтому одного бита на пиксел недостаточно. Для кодирования 4-цветного изображения требуются два бита на пиксел, поскольку два бита могут принимать 4 различных состояния. Может использоваться, например, такой вариант кодировки цветов: 00 — черный, 10 — зеленый, 01 — красный, 11 — коричневый.

На RGB-мониторах все разнообразие цветов получается сочетанием базовых цветов — красного (Red), зеленого (Green), синего (Blue), из которых можно получить 8 основных комбинаций:

RGBцвет
0  0  0  черный
0  0  1  синий
0  1  0  зеленый
0  1  1  голубой
RGBцвет
1  0  0  красный
1  0  1  розовый
1  1  0  коричневый
1  1  1  белый

Разумеется, если иметь возможность управлять интенсивностью (яркостью) свечения базовых цветов, то количество различных вариантов их сочетаний, порождающих разнообразные оттенки, увеличивается. Количество различных цветов — К и количество битов для их кодировки — N связаны между собой простой формулой: 2N = К.

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

Объекты векторного изображения, в отличии от растровой графики, могут изменять свои размеры без потери качества (при увеличении растрового изображения увеличивается зернистость). Подробнее о графических форматах рассказывается в разделе «Графика на компьютере».

Кодирование звука

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

Поступим следующим образом. Будем измерять напряжение через равные промежутки времени и записывать полученные значения в память компьютера. Этот процесс называется дискретизацией (или оцифровкой), а устройство, выполняющее его — аналого-цифровым преобразователем (АЦП).

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

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

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

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

Конечно, такая система кодирования позволяет записать далеко не всякий звук, она годится только для инструментальной музыки. Но есть у нее и неоспоримые преимущества: чрезвычайно компактная запись, естественность для музыканта (практически любой MIDI-редактор позволяет работать с музыкой в виде обычных нот), легкость замены инструментов, изменения темпа и тональности мелодии.

Заметим, что существуют и другие, чисто компьютерные, форматы записи музыки. Среди них следует отметить формат MP3, позволяющий с очень большим качеством и степенью сжатия кодировать музыку. При этом вместо 18—20 музыкальных композиций на стандартный компакт-диск (CDROM) помещается около 200. Одна песня занимает примерно 3,5 Mb, что позволяет пользователям сети Интернет легко обмениваться музыкальными композициями.

Что такое кодировка символов

Кодировка символов

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

ASCII

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

.

ANSI

Коды

ANSI (Американский национальный институт стандартов) — это стандартизированные цифровые или буквенные коды, выпущенные Американским национальным институтом стандартов для обеспечения единообразной идентификации географических объектов во всех федеральных правительственных учреждениях.Он служил координатором системы добровольной стандартизации частного сектора США более 90 лет. По сути, это расширение набора символов ASCII, поскольку оно включает все символы ASCII с дополнительными 128 кодами символов. ASCII просто определяет 7-битную кодовую страницу со 128 символами. ANSI расширяет это значение до 8 бит, и существует несколько различных кодовых страниц для символов от 128 до 255.

Юникод

Unicode — это стандарт, который определяет внутреннюю систему кодирования текста почти во всех операционных системах, используемых в компьютерах в настоящее время, будь то Windows, Unix, Macintosh, Linux или что-то еще, потому что Unicode может обрабатывать символы почти всех современных языков и даже некоторых древних. языков одновременно, если в системе клиента установлены шрифты для конкретного языка.

UTF

Unicode присваивает каждому символу уникальный номер или кодовую точку. Он определяет два метода сопоставления: кодировки UTF (формат преобразования Unicode) и кодировки UCS (универсальный набор символов). Кодировки на основе Unicode реализуют стандарт Unicode и включают UTF-8, UTF-16 и UTF-32 / UCS-4. Они выходят за рамки 8-битных и поддерживают почти все языки мира. UTF-8 набирает обороты как доминирующая международная кодировка в Интернете. UTF-8, UTF-16 и UTF-32, вероятно, являются наиболее часто используемыми кодировками.

UTF-8 — использует 1 байт для представления символов в наборе ASCII, два байта для символов в нескольких алфавитных блоках и три байта для остальной части BMP. Дополнительные символы занимают 4 байта.

UTF-16 — использует 2 байта для любого символа в BMP и 4 байта для дополнительных символов.

UTF-32 — использует 4 байта для всех символов.

Кодовая единица

Для Unicode конкретная последовательность битов называется кодовой единицей.Кодовая единица — это битовая последовательность, используемая для кодирования каждого символа репертуара.

В US-ASCII кодовая единица составляет 7 бит.
В UTF-8 кодовая единица составляет 8 бит.
В EBCDIC кодовая единица составляет 8 бит.
В UTF-16 кодовая единица составляет 16 бит.
В UTF-32 кодовая единица составляет 32 бита.
 


ДАЛЕЕ ….. Подключить C # к MySQL

Текст — Кодировка (набор символов | кодировка | кодовая страница)

Около

Набор символов — это набор символов, в котором каждый символ (назначен | закодирован) в числовую кодовую точку.

Набор символов (как алфавит) — это любой конечный набор символов (знаков).

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

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

В информатике термины:

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

Определение, определенное в RFC 2278, указывает, что набор символов — это именованное сопоставление между последовательностями шестнадцатибитных символов Юникода и последовательностями байтов.

A (кодовая страница | кодировка символов) — это:

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

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

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

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

Декодер / кодировщик

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

Схема

Схема кодировки символов — это форма кодировки символов плюс сериализация байтов. В Юникоде существует семь схем кодировки символов: UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE и UTF-32LE.

См.

Символьная карта окон (только в UTF16)

По умолчанию

В Windows кодировка символов по умолчанию — Cp1252, в Unix — обычно UTF-8. Для обеих этих кодировок существуют недопустимые последовательности байтов (больше в UTF-8, чем для Cp1252).

Заказать

Общая кодировка

Юникод / ​​UCS

ASCII

Пример

В схеме кодирования ASCII для кодовой страницы 850, например:

  • «А» присвоена кодовая точка X’41 ‘,

  • и «B» присвоена кодовая точка X’42 ‘.

Внутри кодовой страницы каждая кодовая точка имеет только одно конкретное значение.

Однобайтовые, двухбайтовые наборы символов и юникод

SBCS

DBCS

Многооктетный

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

Юникод был создан для того, чтобы в одном потоке данных можно было хранить разные языки.Эта одна «кодовая страница» может представлять более 64000 символов, а теперь, с введением суррогатов, она может представлять более 1 000 000 000 символов.

Проблемы кодовых страниц

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

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

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

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

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

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

  • Символы, представленные в неподдерживаемой кодовой странице, могут быть преобразованы в вопросительные знаки (?) Или другие заменяющие символы или в более простую версию (например, удаление диакритических знаков из буквы). В любом случае исходный персонаж может быть утерян.

Установить кодировку (локаль)

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

Кодировка задается так называемым языковым стандартом.

База данных

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

SAP

(поддержка национальных языков = NLS)

Окна

Приложение

Пуск> Панель управления> Язык и региональные стандарты> Языки> Текстовая служба и языки ввода

Dos

Чтобы найти текущую кодовую страницу консоли, введите команду CHCP в окне командной строки.

  C: \ Documents and Settings \ Rixni> chcp
Страница активных кодов: 850 
 

Linux

HTML

Файл

Некоторые редакторы реализовали сканер набора символов, который может сказать вам, с каким набором символов был сохранен файл.

Например, в Jedit выберите Utilities> Buffer Options.

Обнаружение

Документация / Ссылка

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

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

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

Почему это происходит?

Кодировка символов

Кодировка символов сообщает компьютерам, как преобразовывать цифровые данные в буквы, числа и символы. Это делается путем присвоения определенного числового значения букве, цифре или символу.Сегодня используется ряд наборов кодировок символов, но наиболее распространенными форматами, используемыми во всемирной паутине, являются ASCII, UTF-8 и Unicode.

Чтобы правильно отображать переведенный цифровой контент, необходимо использовать правильный набор символов (также известный как кодировка символов).

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

ASCII

В 1963 году была установлена ​​схема кодирования символов ASCII (Американский стандартный код для обмена информацией) как общий код, используемый для представления английских символов, при этом каждой букве было присвоено числовое значение от 0 до 127.

Большинство современных подмножеств кодировки символов основаны на схеме кодирования символов ASCII и поддерживают несколько дополнительных символов.

ANSI / Windows-1252

Когда появилась операционная система Windows, быстро был принят новый стандарт, известный как набор символов ANSI. Фраза «ANSI» была также известна как кодовые страницы Windows (кодовая страница 1252), хотя она не имела ничего общего с Американским национальным институтом стандартов.

Кодировка

Windows-1252 или CP-1252 (кодовая страница 1252) стала популярной с появлением Microsoft Windows, но в конечном итоге была вытеснена, когда Unicode был реализован в Windows.

ISO-8859-1

Набор кодировок ISO-8859-1 включает все символы Windows-1252, включая расширенное подмножество знаков препинания и деловых символов. Этот стандарт можно было легко перенести на несколько текстовых процессоров и даже на недавно выпущенные версии HTML 4.

ISO-8859-1 был прямым расширением набора символов ASCII. Хотя для того времени поддержка была обширной, формат все еще был ограничен.

UTF-8

После дебюта ISO-8859-1 Консорциум Unicode перегруппировался, чтобы разработать более универсальные стандарты для переносимой кодировки символов.

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

UTF-8 был разработан для полной обратной совместимости с ASCII.

Большая идея

Итак, ясно, что каждый набор символов использует уникальную таблицу идентификационных кодов для представления определенного символа пользователю.Если вы использовали набор символов ISO-8859-1 для редактирования документа, а затем сохранили этот документ как документ в кодировке UTF-8, не объявляя, что содержимое было UTF-8, специальные символы и бизнес-символы будут отображаться нечитаемыми.

Большинство современных веб-браузеров поддерживают устаревшие кодировки символов, поэтому веб-сайт может содержать страницы, закодированные в ISO-8859-1, Windows-1252 или любом другом типе кодировки. Браузер должен правильно отображать эти символы на основе формата кодировки символов, не сообщаемого сервером.

Однако, если набор символов неправильно объявлен во время отображения страницы, веб-сервер по умолчанию обычно откатывается без какого-либо определенного формата кодировки символов (обычно ASCII).

Это заставляет ваш браузер или мобильное устройство определять правильный тип кодировки символов для страницы. Основываясь на спецификациях WHATWG, принятых W3C, наиболее типичным резервным вариантом по умолчанию является UTF-8. Однако некоторые браузеры вернутся к ASCII.

Советы и следующие шаги

Чтобы ваши пользователи всегда видели правильный контент на ваших рабочих страницах HTML, убедитесь:

  • Содержимое сохраняется и кодируется с использованием UTF-8
  • Объявите тип кодировки на своей странице с помощью метатегов
  • Ваш сервер предоставляет правильные данные (даже если данные на вашей странице правильно закодированы в UTF-8 и объявлены на странице, ваш сервер может обслуживать страницу с HTTP-заголовком, который читается конечным пользователем как другая кодировка)
  • Заголовок HTTP Content-Type имеет UTF-8, указанный как тип кодировки

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

Последнее обновление 18 ноября 2020 г.

Что такое кодировка символов UCS-2?

Основы кодирования UCS-2 и SMS-сообщений

UCS-2 и другие стандарты UCS определены Международной организацией по стандартизации (ISO) в ISO 10646. UCS-2 представляет собой возможное максимум 65 536 символов или в шестнадцатеричном формате от 0000h до FFFFh (2 байта). Символы в UCS-2 синхронизируются с базовой многоязычной плоскостью в Unicode.

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

UCS-2 — кодировка с фиксированной шириной; каждая закодированная кодовая точка займет ровно 2 байта. Поскольку SMS-сообщение передается в 140 октетах, сообщение, закодированное в UCS-2, имеет максимум 70 символов (на самом деле, кодовых точек): (140 * 8) / (2 * 8) = 70.

При отправке SMS-сообщений с помощью Twilio мы автоматически отправляем сообщения в максимально компактной кодировке.Если вы включите в тело сообщения любых символов, отличных от GSM-7, мы автоматически вернемся к кодировке UCS-2 (которая ограничит каждое тело сообщения 70 символами). Кроме того, Twilio добавляет 6-байтовый заголовок пользовательских данных (это указывает принимающему устройству, как собирать сообщения), оставляя 153 символа GSM-7 или 67 символов UCS-2 для вашего сообщения.

Обратите внимание, что это может привести к отправке большего количества сообщений, чем вы ожидаете — тело со 152 GSM-7-совместимыми символами и одним символом Unicode будет разделено на 3 сообщения при кодировании в UCS-2.Это повлечет за собой оплату 3 исходящих сообщений для вашей учетной записи.

Как проверить, можно ли закодировать мое сообщение в GSM-7?

Эта страница содержит интерактивный инструмент, который может проверить, возможно ли кодирование вашего сообщения в GSM-7 или требуется ли UCS-2.

Как я могу избежать разделения своих сообщений, если я ожидаю, что они будут в GSM-7?

К сожалению, кодировка символов GSM-7 не поддерживается многими текстовыми редакторами. Даже установка кодировки ASCII (или US_ASCII) не гарантирует, что текст, который вы пишете, будет ограничен GSM-7.Вы можете использовать инструмент по ссылке выше, чтобы быстро проверить количество сегментов, то есть общее количество сообщений, на которые будет разделен некоторый текст.

Если вы пишете в редакторе с поддержкой Unicode, будьте особенно осторожны. Текстовые редакторы, предназначенные для написания, могут автоматически добавлять угловые умные кавычки, нестандартные пробелы или знаки препинания, которые похожи на GSM-7, но представляют собой другой символ Unicode. Мы обсудили некоторые из этих вопросов в нашем блоге.

Почему UCS-2 используется в сетях GSM, когда GSM-7 является алфавитом по умолчанию?

В некоторых языках обычно используется более 128 символов, поэтому требуется более широкий набор потенциальных символов.UCS-2 был реализован во многих сетях GSM и на многих мобильных устройствах и фактически считается стандартным резервным вариантом.

Кодировка UCS-2 устарела?

Согласно стандарту Unicode, UCS-2 является устаревшей кодировкой, поскольку она не была разработана для поддержки символов в так называемых дополнительных или «астральных» планах Unicode. Плоскость 0, базовая многоязычная плоскость, содержит кодировки символов, которые считаются наиболее часто используемыми символами в современных языках. UCS-2 ограничен кодовыми точками FFFFh или 65 536 возможных символов.

UTF-16 является преемником UCS-2. и имеет возможность адресовать базовую и 16 дополнительных плоскостей для общего максимального количества символов 10FFFFh или 1114 112 кодовых точек.

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

Emoji, акценты и международный текст

Кодировка символов

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

Сообщество программного обеспечения в основном перешло на UTF-8 в качестве стандарта для хранения и обмена текста, но все еще существует большой объем текста в других кодировках.Всякий раз, когда вы читаете текстовый файл в R, вам необходимо указать кодировку. Если вы этого не сделаете, R попытается угадать кодировку, а если угадывает неправильно, неправильно интерпретирует последовательность единиц и нулей.

Мы продемонстрируем трудности кодирования с текстом романа Джейн Остин, Mansfield Park , предоставленным Project Gutenberg. Мы загрузим текст, затем прочитаем строки романа.

  # скачать заархивированный текст с зеркала Project Gutenberg
url <- "http: // зеркало.csclub.uwaterloo.ca/gutenberg/1/4/141/141.zip "
tmp <- временный файл ()
download.file (url, tmp)

# читать текст из zip файла
con <- unz (tmp, "141.txt", encoding = "UTF-8")
строки <- readLines (con)
закрыть (кон)  

Функция unz и другие аналогичные функции подключения файлов имеют кодировку аргументов, которые, если не указывать, по умолчанию предполагают, что текст закодирован в собственной кодировке вашей операционной системы. Чтобы обеспечить единообразное поведение на всех платформах (Mac, Windows и Linux), вы должны явно установить этот параметр.Здесь мы устанавливаем encoding = "UTF-8" . Это разумное значение по умолчанию, но оно не всегда уместно. В общем, вы должны определить соответствующее значение кодировки , просмотрев файл. К сожалению, расширение файла «.txt» не информативно и может соответствовать любой кодировке. Однако, если мы прочитаем первые несколько строк файла, мы увидим следующее:

  [1] «Автор: Джейн Остин»
 [2] ""
 [3] "Дата выпуска: июнь 1994 г. [Etext # 141]"
 [4] «Дата публикации: 11 февраля 2015 г.»
 [5] ""
 [6] «Язык: английский»
 [7] ""
 [8] «Кодировка набора символов: ASCII»
 [9] ""
[10] «*** НАЧАЛО ЭТОГО ПРОЕКТА GUTENBERG EBOOK MANSFIELD PARK ***»  

Кодировка набора символов отображается как ASCII, которая является подмножеством UTF-8.Итак, мы должны быть в хорошей форме.

К сожалению, у нас возникают проблемы, как только мы пытаемся обработать текст:

  corpus :: term_stats (lines) # выдает ошибку  
  Ошибка в корпусе :: term_stats (строки): запись аргумента 15252 неправильно помечена как «UTF-8»: недопустимый ведущий байт (0xA3) в позиции 36  

Сообщение об ошибке сообщает нам, что строка 15252 содержит недопустимый байт.

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

  строк [! Utf8_valid (lines)]  

Значит, других недопустимых строк нет.

Байт-нарушение в строке 15252 отображается как \ xa3 , escape-код для шестнадцатеричного значения 0xa3, десятичного значения 163. Чтобы понять, почему это недопустимо, нам нужно узнать больше о кодировке UTF-8.

UTF-8

ASCII

Наименьшей единицей передачи данных на современных компьютерах является байт, последовательность из восьми единиц и нулей, которые могут кодировать число от 0 до 255 (шестнадцатеричные 0x00 и 0xff). В самых ранних кодировках символов числа от 0 до 127 (шестнадцатеричные от 0x00 до 0x7f) были стандартизированы в кодировке, известной как ASCII, Американский стандартный код для обмена информацией. Вот символы, соответствующие этим кодам:

  кодов <- матрица (0: 127, 8, 16, byrow = TRUE,
                dimnames = list (0: 7, c (0: 9, буквы [1: 6])))
ascii <- применить (коды, c (1, 2), intToUtf8)

# заменить управляющие коды на ""
ascii ["0", c (0: 6, "e", "f")] <- ""
ascii ["1",] <- ""
ascii ["7", "f"] <- ""

utf8_print (ascii, quote = FALSE)  
  0 1 2 3 4 5 6 7 8 9 а б в г д е
0 \ a \ b \ t \ n \ v \ f \ r
1
2! "# $% & '() * +, -._
6 `а б в г д е ж з и к л м н о
7 п q р с т у ф х ц ч ш щ э ю я {| } ~  

Первые 32 кода (первые две строки таблицы) являются специальными управляющими кодами, наиболее распространенный из которых 0x0a обозначает новую строку ( \ n ). Специальный код 0x00 часто обозначает конец ввода, а R не допускает этого значения в символьных строках. Код 0x7f соответствует элементу управления «удалить».

Когда вы вызываете utf8_print , он использует коды управления форматом подпрограммы низкого уровня utf8_encode ; они форматируются как \ uXXXX для четырех шестнадцатеричных цифр XXXX или как \ UXXXXYYYY для восьми шестнадцатеричных цифр XXXXYYYY :

  utf8_print (intToUtf8 (1: 0x0f), quote = FALSE)  
  [1] \ u0001 \ u0002 \ u0003 \ u0004 \ u0005 \ u0006 \ a \ b \ t \ n \ v \ f \ r \ u000e \ u000f  

Сравните вывод utf8_print с выводом с функцией печати base R:

  print (intToUtf8 (1: 0x0f), quote = FALSE)  
  [1] \ 001 \ 002 \ 003 \ 004 \ 005 \ 006 \ a \ b \ t \ n \ v \ f \ r \ 016 \ 017  
Код управления форматом

Base R ниже 128 с использованием восьмеричных символов перехода.Есть и другие отличия между функциями, которые мы рассмотрим ниже.

Latin-1

ASCII отлично подходит для большинства текстов на английском языке, но не для других языков. Кодировка Latin-1 расширяет ASCII на латинские языки, присваивая числа от 128 до 255 (шестнадцатеричные от 0x80 до 0xff) другим распространенным символам в латинских языках. Мы можем увидеть этих персонажей ниже.

  кодов <- матрица (128: 255, 8, 16, byrow = TRUE,
                dimnames = list (c (8: 9, буквы [1: 6]), c (0: 9, буквы [1: 6])))
latin1 <- применить (коды, c (1, 2), intToUtf8)

# заменить управляющие коды на ""
latin1 [c ("8", "9"),] <- ""

utf8_print (latin1, quote = FALSE)  
  0 1 2 3 4 5 6 7 8 9 а б в г д е
8
9
a ¡¢ £ ¤ ¥ ¦ § ¨ © ª «¬ ® ¯
b ° ± ² ³ ´ µ ¶ · ¸ ¹ º »¼ ½ ¾ ¿
c À Á Â Ä Å Æ Ç È É Ê Ë Ì Í Î Ï
d Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
е а на а в г а я у а я н а я
f ñ ò ó ô õ ö ÷ ø ù ú ü ý þ ÿ  

Как и в случае с ASCII, первые 32 числа являются управляющими кодами.Остальные - символы, распространенные в латинских языках. Обратите внимание, что 0xa3 , недопустимый байт из Mansfield Park , соответствует знаку фунта в кодировке Latin-1. Учитывая контекст байта:

это, наверное, правильный символ. Текст, вероятно, закодирован в Latin-1, а не в UTF-8 или ASCII, как заявлено в файле.

Если вы столкнулись с ошибкой при чтении текста, который якобы является ASCII, вероятно, он закодирован как Latin-1.Обратите внимание, однако, что это не единственная возможность, и существует множество других кодировок. Функция iconvlist выведет список тех, которые R умеет обрабатывать:

  руководитель (iconvlist (), n = 20)  
  [1] "437" "850" "852" "855"
 [5] «857» «860» «861» «862»
 [9] «863» «865» «866» «869»
[13] «ANSI_X3.4-1968» «ANSI_X3.4-1986 "" АРАБСКИЙ "" ARMSCII-8 "
[17] «ASCII» «ASMO-708» «ATARI» «ATARIST»  

UTF-8

Имея всего 256 уникальных значений, одного байта недостаточно для кодирования каждого символа. Многобайтовые кодировки позволяют кодировать больше. UTF-8 кодирует символы, используя от 1 до 4 байтов каждый, и позволяет использовать до 1112 064 кодов символов. Большинство этих кодов в настоящее время не присвоены, но каждый год консорциум Unicode встречается и добавляет новые символы.Вы можете найти список всех символов в базе данных символов Unicode. Список персонажей Emoji доступен отдельно.

Допустим, вы хотите ввести символ Юникода с шестнадцатеричным кодом 0x2603. Вы можете сделать это одним из трех способов:

  "\ u2603" # с \ u + 4 шестнадцатеричными цифрами  
  [1] ""  
  "\ U00002603" # с \ U + 8 шестнадцатеричных цифр  
  [1] ""  
  intToUtf8 (0x2603) # от целого числа  
  [1] ""  

Для символов выше 0xffff первый метод работать не будет.В Windows ошибка в текущей версии R (исправленная в R-devel) не позволяет использовать второй метод.

Когда вы пытаетесь напечатать Unicode в R, система сначала попытается определить, пригоден ли код для печати или нет. Непечатаемые коды включают контрольные коды и неназначенные коды. В Mac OS R использует устаревшую функцию для этого определения, поэтому он не может распечатать большинство эмодзи. Функция utf8_print использует самую последнюю версию (10.0.0) стандарта Unicode и печатает все символы Unicode, поддерживаемые вашей системой:

  print (intToUtf8 (0x1f600 + 0:79)) # base R  
  [1] «\ U0001f600 \ U0001f601 \ U0001f602 \ U0001f603 \ U0001f604 \ U0001f605 \ U0001f606 \ U0001f607 \ U0001f608 \ U0001f609 \ U0001f60a \ U0001f60b \ U0001f60c \ U0001f60d \ U0001f60e \ U0001f60f \ U0001f610 \ U0001f611 \ U0001f612 \ U0001f613 \ U0001f614 \ U0001f615 \ U0001f616 \ U0001f617 \ U0001f618 \ U0001f619 \ U0001f61a \ U0001f61b \ U0001f61c \ U0001f61d \ U0001f61e \ U0001f61f \ U0001f620 \ U0001f621 \ U0001f622 \ U0001f623 \ U0001f624 \ U0001f625 \ U0001f626 \ U0001f627 \ U0001f628 \ U0001f629 \ U0001f62a \ U0001f62b \ U0001f62c \ U0001f62d \ U0001f62e \ U0001f62f \ U0001f630 \ U0001f631 \ U0001f632 \ U0001f633 \ U0001f634 \ U0001f635 \ U0001f636 \ U0001f637 \ U0001f638 \ U0001f639 \ U0001f63a \ U0001f63b \ U0001f63c \ U0001f63d \ U0001f63e \ U0001f63f \ U0001f640 \ U0001f641 \ U0001f642 \ U0001f643 \ U0001f644 \ U0001f645 \ U0001f646 \ U0001f647 \ U0001f648 \ U0001f649 \ U0001f64a \ U0001f64b \ U0001f64c \ U0001f64d \ U0001f64e \ U0001f64f " 
  utf8_print (intToUtf8 (0x1f600 + 0:79)) # усекает до ширины линии  
  [1] "😀 😁 😂 😃 😄 😅 😈 😉 😊 😋 😌 😍 😎 😏 😖 😗 😘 😙 😚 😛 😜 😝 😞 😟 😠 😡 😢 😣… " 
  utf8_print (intToUtf8 (0x1f600 + 0:79), chars = 500) # увеличить лимит символов  
  [1] "😀 😁 😂 😃 😄 😅 😈 😉 😊 😋 😌 😍 😎 😏 😖 😗 😘 😙 😚 😛 😜 😝 😟 😠 😢 😣 😤 😥 😦 😧 😨 😩 😫 😭 😮 😯 😰 😱 😲 😳 😴 😵 😶 😸 😹 😺 😻 😼 😽 😾 😿 🙀 🙁 🙂 🙆 🙇 🙈 🙉 🙊 🙋 🙌 🙍 🙎 🙏 " 

(символы с кодами выше 0xffff, включая большинство эмодзи, не поддерживаются в Windows.)

Пакет utf8 предоставляет следующие служебные программы для проверки, форматирования и печати символов UTF-8:

  • as_utf8 () пытается преобразовать символьные данные в UTF-8, выдает ошибку, если данные недействительны;

  • utf8_valid () проверяет, допустимы ли символьные данные в соответствии с заявленной кодировкой;

  • utf8_normalize () преобразует текст в составную нормальную форму Unicode (NFC), при необходимости применяя сворачивание регистра и карты совместимости;

  • utf8_encode () кодирует строку символов, экранируя все управляющие символы, чтобы ее можно было безопасно вывести на экран;

  • utf8_format () форматирует вектор символов путем усечения до указанного предела ширины символа или выравнивания влево, вправо или по центру;

  • utf8_print () выводит на экран символьные данные UTF-8;

  • utf8_width () измеряет отображение с помощью строк символов UTF-8 (многие эмодзи и восточноазиатские символы в два раза шире, чем другие символы).

Пакет не предоставляет метода преобразования из другой кодировки в UTF-8, поскольку функция iconv () из базы R уже служит этой цели.

Перевод на UTF-8

Вернемся к нашей исходной задаче: перевод текста Mansfield Park в R. Наша первая попытка не удалась:

  корпус :: term_stats (строки)  
  Ошибка в корпусе :: term_stats (строки): запись аргумента 15252 неправильно помечена как «UTF-8»: недопустимый ведущий байт (0xA3) в позиции 36  

Мы обнаружили проблему в строке 15252:

.

Текст, скорее всего, закодирован в Latin-1, а не в UTF-8 (или ASCII), как мы думали изначально.Мы можем проверить это, попытавшись преобразовать из Latin-1 в UTF-8 с помощью функции iconv () и проверив вывод:

  lines2 <- iconv (lines, "latin1", "UTF-8")
lines2 [15252]  
  [1] «повеление ее красоты и ее 20 000 фунтов стерлингов, любой, кто может удовлетворить»  

Сработало! Теперь мы можем проанализировать наш текст.

  f <- corpus :: text_filter (drop_punct = TRUE, drop = corpus :: stopwords_en)
corpus :: term_stats (строки2, f)  
  поддержка количества терминов
1 фанни 816 806
2 должны 508 492
3 Кроуфорд 493 488
4 мин 482 466
5 лотов 459450
6 промахов 432419
7 сказал 406 400
8 миссис 408 399
9 сэр 372 366
10 Эдмунд 364 364
11 одна 370 358
12 думаю 349 346
13 сейчас 333 331
14 мая 324320
15 раз 310 307
16 маленький 309 300
17 ничего 301291
18 колодец 299 286
19 томов 288 285
20 хорошо 280 275
⋮ (всего 8450 строк)  

Читаемый текст

пакет

Если вам нужно больше, чем чтение в одном текстовом файле, пакет readtext поддерживает чтение текста в различных форматах файлов и кодировках.Помимо простого текста, этот пакет можно читать в PDF-файлах, документах Word, RTF и многих других форматах. (К сожалению, этот пакет в настоящее время не работает при попытке чтения в Mansfield Park ; авторы знают об этой проблеме и работают над исправлением.)

Сетевая рабочая группа К. Мур Запрос комментариев: Университет Теннесси 1522 г. Устарело: 1342 сентября 1993 г. Категория: Трек стандартов MIME (многоцелевые расширения почты Интернета), часть вторая: Расширения заголовка сообщения для текста, отличного от ASCII Статус этого меморандума Этот RFC определяет протокол отслеживания стандартов Интернета для Интернет-сообщество и просит обсуждения и предложения по улучшения.Пожалуйста, обратитесь к текущему выпуску "Интернет Официальные стандарты протокола »для состояния и статуса стандартизации. этого протокола. Распространение этой памятки не ограничено. Абстрактный В этом документе описывается расширение формата сообщения, определенного в RFC. 1521 [1], чтобы разрешить представление наборов символов, отличных от ASCII в заголовках сообщений RFC 822 (STD 11). Описанные расширения были разработаны, чтобы быть совместимыми с существующей Интернет-почтой программное обеспечение для работы с почтой и легко внедряется в программы для чтения почты, которые поддержка RFC 1521.1. Введение RFC 1521 описывает механизм для обозначения текстовых частей тела, которые закодированы в различных наборах символов, а также в методах кодирования такие части тела как последовательности печатаемых символов ASCII. Этот мемо описывает аналогичные методы, позволяющие кодировать не-ASCII текст в различных частях заголовка сообщения RFC 822 [2] способом что вряд ли запутает существующее программное обеспечение для обработки сообщений. Подобно методам кодирования, описанным в RFC 1521, методы описанные здесь, были разработаны, чтобы разрешить использование символов, отличных от ASCII. в заголовках сообщений таким способом, который вряд ли будет нарушен особенности существующих программ обработки почты в Интернете.Особенно, известно, что некоторые программы ретрансляции почты (а) удаляют какое-то сообщение поля заголовка, сохранив другие, (б) изменить порядок адреса в полях To или Cc, (c) изменить (вертикальный) порядок поля заголовка и / или (d) "переносить" заголовки сообщений в разные места чем в исходном сообщении. Кроме того, чтение почты программы, как известно, испытывают трудности с правильным анализом сообщения заголовки, которые, будучи законными в соответствии с RFC 822, используют обратная косая черта, чтобы "скрыть" специальные символы, такие как " RFC 1522 MIME, часть вторая, сентябрь 1993 г. Технические характеристики.Хотя очень жаль, что эти программы не правильно интерпретировать заголовки RFC 822, чтобы «сломать» эти программы, серьезные проблемы в работе почтовой системы Интернета. В расширения, описанные в этом документе, поэтому не полагаются на мало- использовал особенности RFC 822. Вместо этого определенные последовательности "обычных" печатаемых символов ASCII (известные как «закодированные слова») зарезервированы для использования в качестве закодированных данных. В синтаксис закодированных слов таков, что они вряд ли «случайно» отображаются в заголовках сообщений как обычный текст.Кроме того, символы, используемые в закодированных словах, ограничены те, которые не имеют особого значения в контексте, в котором закодированное слово появляется. Как правило, «закодированное слово» - это последовательность печатаемых ASCII символы, начинающиеся с "=?", заканчивающиеся на "? =" и имеющие два знака "?" в между. Он определяет набор символов и метод кодирования, а также также включает исходный текст, закодированный как графические символы ASCII, в соответствии с правилами этого метода кодирования.Составитель почты, реализующий эту спецификацию, предоставит средства ввода текста, отличного от ASCII, в поля заголовка, но будут преобразовать эти поля (или соответствующие части этих полей) в закодированные слова перед их вставкой в ​​заголовок сообщения. Читатель почты, реализующий эту спецификацию, распознает закодированные слова, когда они появляются в определенных частях сообщения заголовок. Вместо того, чтобы отображать закодированное слово "как есть", он будет изменить кодировку и отобразить исходный текст в обозначенном набор символов.ПРИМЕЧАНИЯ Этот меморандум в значительной степени опирается на обозначения и термины, определенные в стандартах STD 11, RFC. 822 и RFC 1521. В частности, синтаксис ABNF, используемый в этот документ определен в STD 11, RFC 822, а также во многих термины, используемые в грамматике для определенных здесь расширений заголовков. Для успешной реализации этого расширения протокола требуется пристальное внимание к деталям как STD 11, RFC 822, так и RFC 1521. Когда термин «ASCII» появляется в этой памятке, он относится к «7- Американский стандартный код Bit для обмена информацией », ANSI Х3.4-1986. Название кодировки MIME для этого набора символов - "US- ASCII ". Если не указано конкретно имя кодировки MIME, в этом документе используется термин «ASCII» как для краткости, так и для Мур [Страница 2] RFC 1522 MIME, часть вторая, сентябрь 1993 г. согласованность со STD 11, RFC 822. Однако разработчики предупредил, что имя набора символов должно быть написано "US-ASCII" в Заголовки MIME-сообщений и частей тела.2. Синтаксис закодированных слов «Закодированное слово» определяется следующей грамматикой ABNF. В используется нотация RFC 822, за исключением того, что пробел символы НЕ МОГУТ появляться между компонентами закодированного слова. encoded-word = "=?" кодировка "?" кодировка "?" закодированный текст "? =" charset = токен; см. раздел 3 кодировка = токен; см. раздел 4 токен = 1 * especials = "(" / ")" / "" / "@" / "," / ";" / ":" / " / "/" / "[" / "]" / "?" / "." знак равно кодированный текст = 1 * ; (но см. "Использование закодированных слов в сообщении ; заголовки ", раздел 5) Имена "кодировки" и "кодировки" не зависят от регистра.Таким образом имя набора символов «ISO-8859-1» эквивалентно «iso-8859-1», а кодировка с именем «Q» может быть записана либо «Q», либо «q». Кодированное слово не может быть длиннее 75 символов, включая кодировка, кодировка, закодированный текст и разделители. Если желательно чтобы закодировать больше текста, чем уместится в закодированном слове из 75 символов, несколько закодированных слов (разделенных пробелом CRLF) могут быть использовал. Хотя нет ограничений на длину многострочного заголовка field, каждая строка поля заголовка, содержащая один или несколько кодированные слова ограничены 76 символами.Ограничения по длине включены не только для облегчения возможность взаимодействия через межсетевые почтовые шлюзы, а также наложить ограничение на количество опережающих просмотров, которое синтаксический анализатор заголовков должен использовать (ища ​​окончательный разделитель? =), прежде чем он сможет решить, токен - это закодированное слово или что-то еще. Символы, которые могут появиться в закодированном тексте, далее ограничено правилами раздела 5. Мур [Страница 3] RFC 1522 MIME, часть вторая, сентябрь 1993 г. 3.Наборы символов Часть "charset" закодированного слова определяет набор символов связанный с незакодированным текстом. Кодировка может быть любой из имена наборов символов, разрешенные в параметре "charset" RFC 1521 "текстовая / обычная" часть тела или любое имя набора символов, зарегистрированное с IANA для использования с типом MIME text / plain content-type [3]. (См. Раздел 7.1.1 RFC 1521 для списка кодировок, определенных в этом документе). В некоторых наборах символов для переключения между «Режим ASCII» и другие режимы.Если незакодированный текст в закодированном слове содержит управляющие коды для выхода из режима ASCII, он также должен содержат дополнительные управляющие коды, так что режим ASCII снова выбранный в конце закодированного слова. (Это правило применяется отдельно для каждого закодированного слова, включая соседние закодированные слова в одном поле заголовка.) Когда есть возможность использовать более одного набора символов для представляют текст в закодированном слове, а при отсутствии частных соглашения между отправителем и получателем сообщения, это рекомендовал использовать элементы серии ISO-8859- * в предпочтение другим наборам символов.4. Кодировки Первоначально допустимые значения для «кодирования» - «Q» и «B». Эти кодировки описаны ниже. Кодировка "Q" рекомендуется для используйте, когда большинство символов, которые нужно закодировать, находятся в ASCII набор символов; в противном случае следует использовать кодировку «B». Тем не менее, программа для чтения почты, которая утверждает, что распознает закодированные слова ДОЛЖЕН быть в состоянии принять любую кодировку для любого набора символов, который он поддерживает. Только часть печатаемых символов ASCII может использоваться в закодированный текст.Использование пробелов и табуляции не допускается, поэтому начало и конец закодированного слова очевидны. Знак "?" персонаж используется в закодированном слове для разделения различных частей закодированные слова друг от друга и, следовательно, не могут появляться в кодированный текст. Другие символы также запрещены в некоторых контексты. Например, закодированное слово во "фразе", предшествующее адрес в поле заголовка From не может содержать никаких "специальных" определено в RFC 822.Наконец, некоторые другие символы запрещены. в некоторых контекстах, чтобы гарантировать надежность сообщений, которые проходят через межсетевые почтовые шлюзы. Кодировка «B» автоматически отвечает этим требованиям. "Q" кодирование позволяет использовать широкий спектр печатаемых символов в некритические места в заголовке сообщения (например, Тема), с Мур [Страница 4] RFC 1522 MIME, часть вторая, сентябрь 1993 г. меньше символов доступно для использования в других местах.4.1. Кодировка "B" Кодировка "B" идентична кодировке "BASE64", определенной в RFC. 1521. 4.2. Кодировка "Q" Кодировка "Q" аналогична кодировке "Цитата для печати" - кодировка передачи определена в RFC 1521. Она предназначена для того, чтобы текст содержащие в основном символы ASCII для дешифрования на ASCII терминал без расшифровки. (1) Любое 8-битное значение может быть представлено знаком "=", за которым следуют два шестнадцатеричные цифры. Например, если используемый набор символов были ISO-8859-1, символ "=", таким образом, будет закодирован как «= 3D» и ПРОБЕЛ на «= 20».(Для шестнадцатеричные цифры от "A" до "F".) (2) 8-битное шестнадцатеричное значение 20 (например, ISO-8859-1 SPACE) может быть представлен как "_" (подчеркивание, ASCII 95.). (Этот персонаж может не проходить через некоторые межсетевые почтовые шлюзы, но использовать его значительно улучшит читаемость данных в кодировке Q с помощью почты читатели, которые не поддерживают эту кодировку.) Обратите внимание, что "_" всегда представляет шестнадцатеричный 20, даже если символ ПРОБЕЛ занимает другую позицию кода в используемом наборе символов.(3) 8-битные значения, соответствующие печатаемым символам ASCII, другим чем "=", "?", "_" (подчеркивание) и ПРОБЕЛ могут быть представлены как эти персонажи. (Но см. Раздел 5 об ограничениях.) 5. Использование закодированных слов в заголовках сообщений. Закодированное слово может появиться в заголовке сообщения или в заголовке части тела. по следующим правилам: (1) Закодированное слово может заменять «текстовый» токен (как определено RFC 822) в любом поле заголовка Тема или Комментарии, любое расширение поле заголовка сообщения или любое поле части тела RFC 1521, для которого тело поля определяется как «* текст».Закодированное слово может также появляются в любом определяемом пользователем ("X-") сообщении или заголовке части тела поле. Обычный текст ASCII и закодированные слова могут отображаться вместе в такое же поле заголовка. Однако закодированное слово, которое появляется в поле заголовка, определенное как "* текст", ДОЛЖНО быть отделено от любых смежное закодированное слово или "текст" линейным пробелом. Мур [Страница 5] RFC 1522 MIME, часть вторая, сентябрь 1993 г. (2) Закодированное слово может появиться внутри комментария, разделенного "(" и ")", т.е., везде, где разрешен "ctext". Точнее, RFC 822 Определение ABNF для "комментария" изменено следующим образом: comment = "(" * (ctext / пара кавычек / комментарий / закодированное слово) ")" Закодированное слово "Q", которое появляется в комментарии, НЕ ДОЛЖНО содержат символы "(", ")" или "закодированное слово, которое появляется в "комментарий" ДОЛЖЕН быть отделен от любого смежного закодированного слова или "ctext" от linear-white-space. (3) В качестве замены сущности «слово» в «фразе», для например, тот, который предшествует адресу в From, To или Cc заголовок.Таким образом, определение ABNF для фразы из RFC 822 становится: фраза = 1 * (закодированное слово / слово) В этом случае набор символов, которые можно использовать в «Q» - кодированное кодированное слово ограничено:. Закодированное слово, которое появляется внутри «фразы» ДОЛЖНЫ быть отделены от любого соседнего «слова», "текст" или "специальный" с помощью linear-white-space. Это ЕДИНСТВЕННЫЕ места, где может появиться закодированное слово. В в частности, закодированное слово НЕ ДОЛЖНО появляться ни в какой части "адрес-спецификация".Кроме того, закодированное слово НЕ ДОЛЖНО использоваться в Полученное поле заголовка. Каждое закодированное слово ДОЛЖНО кодировать целое число октетов. В закодированный текст в каждом закодированном слове должен быть правильно сформирован в соответствии с указанная кодировка; закодированный текст не может быть продолжен в следующее закодированное слово. (Например, "=? Charset? Q? =? = =? Charset? Q? AB? =" будет незаконным, потому что две шестнадцатеричные цифры "AB" должны следовать за "=" в том же закодированном слове.) Каждое закодированное слово ДОЛЖНО представлять собой целое число символов.А многооктетный символ не может быть разделен на соседние закодированные слова. Только данные для печати и пробельные символы следует кодировать с помощью эта схема. Однако, поскольку эти схемы кодирования позволяют кодирование произвольных значений октетов, программы чтения почты, реализующие это декодирование также должно гарантировать, что отображение декодированных данных на терминал получателя не вызовет нежелательных побочных эффектов. Использование этих методов для кодирования нетекстовых данных (например, изображений или звуки) не определяется в этой памятке.Использование закодированных слов для Мур [стр. 6] RFC 1522 MIME, часть вторая, сентябрь 1993 г. представлять строки, состоящие только из символов ASCII, разрешено, но обескуражен. В редких случаях может потребоваться кодирование обычных текст, похожий на закодированное слово. 6. Поддержка закодированных слов читателями почты. 6.1. Распознавание закодированных слов в заголовках сообщений Программа чтения почты должна анализировать сообщение и заголовки частей тела в соответствии с согласно правилам RFC 822, чтобы правильно распознавать закодированные слова.Закодированные слова распознаются следующим образом: (1) Любое поле заголовка сообщения или части тела, определенное как «* текст», или любое другое поле заголовка, определяемое пользователем, следует анализировать следующим образом: Начало в начале полевого тела и сразу после каждого появление linear-white-space, каждая последовательность до 75 печатные символы (не содержащие линейных пробелов) следует проверить, является ли это закодированным словом в соответствии с правила синтаксиса в разделе 2.Любая другая последовательность печатаемых символы следует рассматривать как обычный текст ASCII. (2) Любое поле заголовка, не определенное как «* текст», должно быть проанализировано. в соответствии с правилами синтаксиса для этого поля заголовка. Тем не мение, любое «слово», которое встречается во «фразе», следует рассматривать как encoded-word, если оно соответствует правилам синтаксиса в разделе 2. В противном случае его следует рассматривать как обычное «слово». (3) Внутри «комментария» любая последовательность до 75 печатных символов. (не содержащий linear-white-space), который соответствует правилам синтаксиса в разделе 2 следует рассматривать как закодированное слово.В противном случае это следует рассматривать как обычный текст комментария. 6.2. Отображение закодированных слов Любые закодированные слова, распознанные таким образом, декодируются, и, если возможно, полученный незакодированный текст отображается в исходном наборе символов. При отображении определенного поля заголовка, содержащего несколько закодированные-слова, любое линейное-белое пространство, которое разделяет пару соседние закодированные слова игнорируются. (Это позволяет использовать несколько закодированных слов для представления длинных строк незакодированного текста, без необходимости разделять закодированные слова, где пробелы встречаются в незакодированный текст.) В случае, если в будущем будут определены другие кодировки, и почта ридер не поддерживает используемую кодировку, он может либо (а) отображать закодированное слово как обычный текст, или (б) заменить соответствующий Мур [стр. 7] RFC 1522 MIME, часть вторая, сентябрь 1993 г. сообщение о том, что текст не может быть декодирован. Если программа для чтения почты не поддерживает используемый набор символов, она может (а) отображать закодированное слово как обычный текст (т.е., как это показано в заголовок), (б) приложить максимум усилий для отображения, используя такие имеющиеся символы, или (c) заменить соответствующее сообщение указывая, что декодированный текст не может быть отображен. Если используемый набор символов использует методы переключения кода, отображение закодированного текста неявно начинается в «режиме ASCII». В Кроме того, программа чтения почты должна гарантировать, что устройство вывода один раз снова в "режиме ASCII" после отображения закодированного слова. 6.3. Почтовый ридер, обрабатывающий неправильно сформированные закодированные слова Возможно, что закодированное слово, допустимое в соответствии с синтаксис, определенный в разделе 2, неправильно сформирован в соответствии с правила для используемой кодировки.Например: (1) Закодированное слово, содержащее символы, недопустимые для определенная кодировка (например, '-' в кодировке "B"), неправильно сформирован. (2) Любое закодированное слово, которое кодирует нецелое число неправильно сформированы символы или октеты. Читателю почты не нужно пытаться отобразить текст, связанный с неправильно сформированное закодированное слово. Однако программа для чтения почты ДОЛЖНА НЕ предотвращать отображение или обработку сообщения из-за закодированного слово сформировано неправильно.7. Соответствие Программа составления писем, заявляющая о соответствии этой спецификации. ДОЛЖЕН гарантировать, что любая строка печатаемого ASCII без пробелов символы внутри "* text" или "* ctext", начинающегося с "=?" а также заканчивается на "? =" - допустимое закодированное слово. ("начинается" означает: в начало тела поля или сразу после linear-white-space; "концы" означает: в конце тела поля или непосредственно перед ним linear-white-space.) Кроме того, любое «слово» в «фразе», которое начинается с "=?" и заканчивается на "? =" должно быть действительным закодированным словом.Программа чтения почты, заявляющая о соответствии этой спецификации должен уметь отличать закодированные слова от "текста", "ctext" или "word" в соответствии с правилами раздела 6, когда они появляются в соответствующие места в заголовках сообщений. Он должен поддерживать как «B» и "Q" кодировки для любого набора символов, который он поддерживает. В программа должна иметь возможность отображать незакодированный текст, если символ Мур [Страница 8] RFC 1522 MIME, часть вторая, сентябрь 1993 г. установлен "US-ASCII".Для наборов символов ISO-8859- * почта программа чтения должна, по крайней мере, отображать символы, которые также входят в набор ASCII. 8. Примеры От: =? US-ASCII? Q? Keith_Moore? = Кому: =? ISO-8859-1? Q? Keld_J = F8rn_Simonsen? = CC: =? ISO-8859-1? Q? Andr = E9 _? = Пирар Тема: =? ISO-8859-1? B? SWYgeW91IGNhbiByZWFkIHRoaXMgeW8 =? = =? ISO-8859-2? B? DSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg ==? = От: =? ISO-8859-1? Q? Olle_J = E4rnefors? = Кому: [email protected], [email protected] Тема: Время для ISO 10646? Кому: Дэйв Крокер Копия: [email protected], [email protected] От: =? ISO-8859-1? Q? Patrik_F = E4ltstr = F6m? = Тема: Re: RFC-HDR уход и кормление От: Натаниэль Боренштейн (=? iso-8859-8? b? 7eXs + SDv4SDp7Oj08A ==? =) Кому: Грег Водрей, Нед Фрид , Кит Мур Тема: Тест нового генератора заголовков MIME-версия: 1.0 Тип содержимого: текстовый / простой; кодировка = ISO-8859-1 9.использованная литература [1] Боренштейн Н. и Н. Фрид, MIME (Многоцелевая интернет-почта. Расширения) Часть первая: механизмы определения и описания формат тел сообщений в Интернете », RFC 1521, Bellcore, Innosoft, сентябрь 1993 г. [2] Крокер, Д., "Стандарт формата Интернет-текста ARPA" Сообщения », STD 11, RFC 822, UDEL, август 1982 г. [3] Рейнольдс Дж. И Дж. Постел, «Присвоенные номера», STD 2, RFC 1340, USC / Институт информационных наук, июль 1992 г.Мур [Страница 9] RFC 1522 MIME, часть вторая, сентябрь 1993 г. 10. Соображения безопасности Вопросы безопасности в этой памятке не обсуждаются. 11. Адрес автора Кейт Мур Университет Теннесси 107 Эйрес Холл Ноксвилл, TN 37996-1301 Электронная почта: [email protected] Мур [Страница 10]

Кодировка символов

Если бы вы могли видеть разговор между компьютерами, он, вероятно, выглядел бы примерно так: «010110111011101011010010110... ". Этот язык, называемый двоичным, используется компьютерами для связи друг с другом или для передачи данных между их компонентами. Но зачем кому-то проектировать компьютер с двоичной системой в качестве основы вместо использования обычного алфавита? Причина в том, что двоичная система идеально адаптируется к физической структуре схем, где вы можете использовать только два разных сигнала: электрический импульс (1) или полное отсутствие сигнала (0).

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

Что делает кодировка символов n , так это разделение этих битов (нулей и единиц) на группы по n бит в каждой и присвоение символа каждой полученной последовательности. Проще говоря, кодировку символов (или набор символов) можно рассматривать как таблицу преобразования, где каждая группа битов связана с одним символом.Например, 8-битная кодировка символов может представлять последовательность «10010101» как букву «а», последовательность «01101100» как символ «&» и так далее.

Чтобы пролить свет на темы, затронутые в предыдущем абзаце, мы возьмем одну конкретную кодировку символов, которая оказалась одной из самых известных для восточных компьютерных систем: ASCII . Эта кодировка очень примитивна и, следовательно, проста. В следующей таблице показаны все значения ASCII и для прописных букв (от A до Z):

Символ Двоичный код
А 1000001
В 1000010
С 1000011
D 1000100
E 1000101
Ф. 1000110
G 1000111
H 1001000
Я 1001001
Дж 1001010
К 1001011
л 1001100
M 1001101
Символ Двоичный код
N 1001110
O 1001111
п. 1010000
Q 1010001
R 1010010
S 1010011
Т 1010100
U 1010101
В 1010110
Вт 1010111
X 1011000
Y 1011001
Z 1011010

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

Таким образом, если мы перехватим строку компьютерного кода «1001000101010010011011001100» и узнаем, что для ее создания используется кодировка символов ASCII , мы могли бы перевести ее в западный алфавит. Для этого сначала нам нужно разделить строку на группы по 7 чисел в каждой (поскольку ASCII - это 7-битная кодировка символов), в результате получится «1001000 1010100 1001101 1001100».Теперь каждый из этих фрагментов представляет собой символ, который мы можем декодировать, просматривая его соответствие в таблице ASCII . Если вы выполните поиск совпадений в таблице выше, вы увидите слово « HTML ».

Кодировки

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

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

Один из доступных способов указать кодировку символов, используемую в документе, - это использовать мета-элемент и его атрибут charset , который должен быть объявлен в разделе документа head . В следующем примере мы делаем объявление, в котором устанавливаем кодировку, используемую документом, на ASCII (с его предпочтительным именем US - ASCII ) в качестве кодировки символов страницы.

  
  

Другими очень популярными и полезными кодировками символов являются ISO -8859-1 (обычно называемый "Latin 1") и UTF -8.

Унификация

UTF -8

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

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

UTF -8 - это 8-битная кодировка символов переменной длины для Unicode, которая становится очень популярной в Интернете из-за ее способности представлять каждый универсальный символ, по-прежнему совместимый с ASCII . UTF -8 использует от 1 до 4 байтов для кодирования одного символа (от 8 до 32 бит) в зависимости от символа Unicode.

Документ HTML , использующий кодировку UTF -8, должен содержать следующее объявление в своем заголовке:

  
  

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *