Для кодирования одного символа используется: N=2 i ; N=2 8 =256.». Скачать бесплатно и без регистрации.

Содержание

Представление нечисловой информации в компьютере






Представление текстовой информации в компьютере

Изучив эту тему, вы узнаете и повторите:

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

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

1. Таблица кодирования ASCII.

А теперь «заглянем» в память компьютера и разберемся, как же представлена в нем текстовая информация.

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

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

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

Как мы выяснили, традиционно для кодирования одного символа используется 8 бит. И, когда люди определились с количеством бит, им осталось договориться о том, каким кодом кодировать тот или иной символ, чтобы не получилось путаницы, т.е. необходимо было выработать стандарт – все коды символов сохранить в специальной таблице кодов. В первые годы развития вычислительной техники таких стандартов не существовало, а сейчас наоборот, их стало очень много, но они противоречивы. Первыми решили эти проблемы в США, в институте стандартизации. Этот институт ввел в действие таблицу кодов ASCII (AmericanStandardCodeforInformationInterchange – стандартный код информационного обмена США).

Рассмотрим таблицу кодов ASCII.

Пояснение: раздать учащимся распечатанную таблицу кодов ASCII.

Таблица ASCII разделена на две части. Первая – стандартная – содержит коды от 0 до 127. Вторая – расширенная – содержит символы с кодами от 128 до 255.

Первые 32 кода отданы производителям аппаратных средств и называются они управляющие, т.к. эти коды управляют выводом данных. Им не соответствуют никакие символы.

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

Коды расширенной части таблицы ASCII отданы под символы национальных алфавитов, символы псевдографики и научные символы.

Стандартная часть таблицы кодов ASCII

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

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

Коды национального (русского) алфавита расширенной частитаблицы ASCII


Альтернативные системы кодирования кириллицы.

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

Для разных типов ЭВМ используются различные кодировки:

В настоящее время существует 5 кодовых таблиц для русских букв: Windows (СР(кодовая страница)1251), MS – DOS (СР(кодовая страница)866), KOИ – 8 (Код обмена информацией, 8-битный) (используется в OS UNIX), Mac (Macintosh), ISO (OS UNIX).

Одним из первых стандартов кодирования кириллицы на компьютерах был стан-дарт КОИ-8.

Национальная часть кодовой таблицы стандарта КОИ8-Р

В настоящее время применяется и кодовая таблица, размещенная на странице СР866 стандарта кодирования текстовой информации, которая используется в операционной системе MS DOS или сеансе работы MS DOS для кодирования кириллицы.

Национальная часть кодовой таблицы СР866

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

Национальная часть кодовой таблицы СР1251

Во всех представленных кодовых таблицах, кроме таблицы стандарта Unicode, для кодирования одного символа отводится 8 двоичных разрядов (8 бит).

В мире существует примерно 6800 различных языков. Если прочитать текст, напечатанный в Японии на компьютере в России или США, то понять его будет нельзя. Чтобы буквы любой страны можно было читать на любом компьютере, для их кодировки стали использовать 2 байта (16 бит).


		N = 2i 
		2i = 216 = 65536
		N = 65536 	
		N – мощность алфавита символов в кодовой таблице Unicode.
		i – информационный вес символа

Основополагающая таблица использования кодового пространства Unicode

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

Рассмотрим примеры.

1) Представьте в форме шестнадцатеричного кода слово «ЭВМ» во всех пяти кодировках. Воспользуемся компьютерным калькулятором для перевода чисел из десятичной в шестнадцатеричную систему счисления.

Последовательности десятичных кодов слова «ЭВМ» в различных кодировках составляем на основе кодировочных таблиц:


	КОИ8-Р:	252 247 237
	СР1251:	221 194 204
	СР866:	157 130 140
	Мас:		157 130 140
	ISO:		205 178 188

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


	КОИ8-Р:    FCF7 ED
	СР1251:    DDC2 CC
	СР866:    	9D 82 8C
	Мас:     	9D 82 8C
	ISO:    	CDB2 BC

2) Определить числовой код символа в кодировке Unicode с помощью тексто-вого редактора MicrosoftWord.

1. В операционной системе Windows запустить текстовый редактор MicrosoftWord.

2. В текстовом редакторе MicrosoftWord ввести команду [Вставка-Символ…]. На экране появится диалоговое окно Символ. Центральную часть диалогового окна занимает фрагмент таблицы символов.

3. Для определения числового кола знака кириллицы с помощью раскрывающегося списка Набор: выбрать пункт кириллица.

4. Для определения шестнадцатеричного числового кода символа в кодировке Unicode с помощью раскрывающегося списка из:

выбрать тип кодировки Юникод (шестн.).

5. В таблице символов выбрать символ Э. В текстовом поле кодзнака : появится его шестнадцатеричный числовой код (в данном случае 042D).

Решите задачи:

№1. Закодируйте с помощью таблицы ASCII слова: А) Excel; Б) Access; В) Windows; Г) ИНФОРМАЦИЯ.

№2. Буква «i» в таблице кодов имеет код 105. Не пользуясь таблицей, расшифруйте следующую последовательность кодов: 102, 105, 108, 101.

№3. Десятичный код буквы «е» в таблице ASCII равен 101. Не пользуясь таблицей, составьте последовательность кодов, соответствующих слову help.

№4. Десятичный код буквы «i» в таблице ASCII равен 105. Не пользуясь таблицей, составьте последовательность кодов, соответствующих слову link.

№5. Декодируйте следующие тексты, заданные десятичным кодом:


	А) 192 235 227 238 240 232 242 236;
	Б) 193 235 238 234 45 241 245 229 236 224;
	В) 115 111 102 116 119 97 114 101.

№6. Во сколько раз увеличится информационный объем страницы текста при его преобразовании из кодировки Windows 1251 (таблица кодировки содержит 256 символов) в кодировку Unicode (таблица кодировки содержит 65536 символов)?

№7. Каков информационный объем текста, содержащего слово ПРОГРАММИРОВАНИЕ:


	А) в 16-битной кодировке;   
	Б) в 8-битной кодировке.

№8. Текст занимает ¼ Кбайта. Какое количество символов он содержит?

№9.

Текст занимает полных 6 страниц. На каждой странице размещается 30 строк по 80 символов. Определить объем оперативной памяти, который займет этот текст.

№10. Свободный объем оперативной памяти компьютера 320 Кбайт. Сколько страниц книги поместится в ней, если на странице:


	А) 32 строки по 32 символа; 
	Б) 64 строки по 64 символа; 
	В) 16 строк по 32 символа.

№11. Текст занимает 20 секторов на двусторонней дискете объемом 360 Кбайт. Дискета разбита на 40 дорожек по 9 секторов. Сколько символов содержит текст?

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

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

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

О чем будет под катом: принцип работы одно байтовых кодировок (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 – это кодировочная таблица, в которой для кодирования каждого символа используется 2 байта, т.е. 16 бит. На основании такой таблицы может быть закодировано N=216=65 536 символов.

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

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

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

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

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 байт, такое кодирование экономичнее, чем чистый Юникод.

Задачи

1. В кодируемом английском тексте используется только 26 букв латинского алфавита и еще 6 знаков пунктуации. В этом случае текст, содержащий 1000 символов можно гарантированно сжать без потерь информации до размера:

— 8000 бит;

— 7000 бит;

— 5000 бит;

— 1000 бит.

2.

Словарь Эллочки – «людоедки» (персонаж романа «Двенадцать стульев») составляет 30 слов. Сколько бит достаточно, чтобы закодировать весь словарный запас Эллочки? Варианты: 8, 5, 3, 1.

4.4. Единицы измерения объема данных и ёмкости памяти: килобайты, мегабайты, гигабайты…

Итак, в мы выяснили, что в большинстве современных кодировок под хранение на электронных носителях информации одного символа текста отводится 1 байт. Т.е. в байтах измеряется объем (V), занимаемый данными при их хранении и передаче (файлы, сообщения).

Объем данных (V) – количество байт, которое требуется для их хранения в памяти электронного носителя информации.

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

Однако байт – мелкая единица измерения объема данных, более крупными являются килобайт, мегабайт, гигабайт, терабайт…

Следует запомнить, что приставки “кило”, “мега”, “гига”… не являются в данном случае десятичными. Так “кило” в слове “килобайт” не означает “тысяча”, т.е. не означает “103”. Бит – двоичная единица, и по этой причине в информатике удобно пользоваться единицами измерения кратными числу “2”, а не числу “10”.

1 байт = 23 =8 бит, 1 килобайт = 210 = 1024 байта. В двоичном виде 1 килобайт = &10000000000 байт.

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

Таблица 11.

Именование Обозначение Значение в байтах
килобайт 1 Кb 210 b 1 024 b
мегабайт 1 Mb 210 Kb = 220 b 1 048 576 b
гигабайт 1 Gb 210 Mb = 230 b 1 073 741 824 b
терабайт 1 Tb 210 Gb = 240 b 1 099 511 627 776 b

В связи, с тем, что единицы измерения объема и ёмкости носителей информации кратны 2 и не кратны 10, большинство задач по этой теме проще решается тогда, когда фигурирующие в них значения представляются степенями числа 2. Рассмотрим пример подобной задачи и ее решение:

В текстовом файле хранится текст объемом в 400 страниц. Каждая страница содержит 3200 символов. Если используется кодировка KOI-8 (8 бит на один символ), то размер файла составит:

— 1 Mb;

— 1,28 Mb;

— 1280 Kb;

— 1250 Kb.

Решение

1) Определяем общее количество символов в текстовом файле. При этом мы представляем числа, кратные степени числа 2 в виде степени числа 2, т.е. вместо 4, записываем 22 и т.п. Для определения степени можно использовать Таблицу 7.

символов.

2) По условию задачи 1 символ занимает 8 бит, т.е. 1 байт => файл занимает 27*10000 байт.

3) 1 килобайт = 210 байт => объем файла в килобайтах равен:

.

Задачи

1. Сколько бит в одном килобайте?

— &1000;

— &10000;

— &10000000;

— &10000000000000.

2. Чему равен 1 Мбайт?

— 1024 байта;

— 1024 килобайта;

— 1000000 бит;

— 1000000 байт.

3. Сколько бит в сообщении объемом четверть килобайта? Варианты: 250, 512, 2000, 2048.

4. Объем текстового файла 640 Kb. Файл содержит книгу, которая набрана в среднем по 32 строки на странице и по 64 символа в строке.

Unicode сколько бит на символ?

Сколько страниц в книге: 160, 320, 540, 640, 1280?

5. Досье на сотрудников занимают 8 Mb. Каждое из них содержит 16 страниц (32 строки по 64 символа в строке). Сколько сотрудников в организации: 256; 512; 1024; 2048?

Дата публикования: 2014-11-02; Прочитано: 420 | Нарушение авторского права страницы

ЕГЭ по информатике 2021 — Задание 11 (Количество информации)

Урок посвящён 11 заданию из ЕГЭ по информатике нового формата 2021. Проанализируем основные примеры и научимся решать это задание!

В 11 задании из ЕГЭ по информатике часто даются задачи на умение работать с количеством информации.

Приступим к делу! Раньше это задание было под номером тринадцать.


Задача (Демонстрационный вариант ЕГЭ по информатике, 2018)

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


Решение:

У каждого пользователя есть пароль, состоящий из 10 символов. Это значит, длина пароля 10 символов!

И в каждую ячейку мы может выбрать символ из 26 букв!


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

Теперь нужно определить: сколько бит занимает одна ячейка (1 символ пароля!).

Когда речь идёт о количестве бит, применяем формулу, которую мы использовали в 9 задании из ЕГЭ по информатике. Там мы кодировали цвета для одного пикселя, а здесь нужно закодировать 26 букв для одного поля пароля.


Применяем:


N = 2i = 26

Целого числа нету для i (количества бит), чтобы равенство было верным. Значит берём столько количество бит, сколько точно будет достаточно, чтобы закодировать 26 букв (символов).


N = 25 > 26

Получаем одна ячейка (одно поле) пароля занимаем 5 бит! А в пароле их 10! Значит, весь пароль будет занимать:


Vпароля = 5 бит * 10 символов = 50 бит (в одном пароле!)

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

Если взять 7 блоков по 8 бит (1 байту), то нам хватит этого на один пароль.


7 блоков (байт) * 8 бит = 56 бит > 50 бит

Таким образом, на 1 пароль потребуется 7 байт!

Тогда на 50 пользователей потребуется:


50 пользователей * 7 байт = 350 байт (для 50 пользователей).
Ответ: 350

Разберём задачу, которая была на реальном экзамене в Москве


Задача (ЕГЭ по информатике, 2020, Москва)

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


Решение:

Здесь длина пароля составляет 11 символов!


Найдём сколько бит занимает одна ячейка пароля.


N = 2i = 36
N = 26 = 64 > 36

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

Найдём сколько бит нужно на весь пароль.


Vпароля = 6 бит * 11 символов = 66 бит (в одном пароле!)

Теперь найдём, а сколько байт нужно на 1 пароль:


9 * 8 бит = 72 бит > 66 бит

Следовательно, 9 байт достаточно, чтобы покрыть 66 бит на 1 пароль.

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


Vпользователя = 750 байт / 30 = 25 байт (приходится на одного пользователя)

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


Vдоп. о 1 пол. = 25 байт — 9 байт = 16 байт

Это и будет ответ.


Ответ: 16

Ещё один важный пример из запасов тренировочных задач ЕГЭ по информатике.


Задача (Номера спортсменов)

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


Решение:

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

В этой задаче сказано: записывая его номер с использованием минимально возможного количества бит, одинакового для каждого спортсмена . Это означает что у нас есть 48 различных позиций (номеров), которые нужно закодировать с помощью определённого количества бит. В предыдущей задаче, у нас было 62 различные позиции (символа), которые нужно было закодировать с помощью определённого количества бит. Мы там использовали формулу N = 2i.

Поэтому будем опять применять формулу N = 2i.


На рисунке показано, как может происходить кодирование чисел. Например, для двух номеров потребуется 1 бит (21 = 2), для четырёх номеров потребуется два бита (22 = 4). Нам нужно закодировать 48 чисел! Причём для каждого участника отведено одинаковое количество бит!

Можно сказать, что здесь работает формула, которую рассматривали в 8 задании. Всего нужно составить 48 различных комбинаций (закодировать 48 номеров). В каждой ячейке можно писать либо 0, либо 1 (Свойство бита информации). Какова должна быть длина «слова» (количество бит) ?


N = 2i = 26 бит = 64 > 48

Получается 6 бит потребуется для того, чтобы была возможность записать любой номер от 1 до 48 для каждого спортсмена. Если взять пять бит, то мы будем иметь возможность записать номера только от 1 до 25 = 32 для каждого спортсмена (этого не хватает).

Т.к. все участники пересекли финиш, а на каждого участника выделено по 6 бит, то получается:


6 бит * 48 = 288 бит = 36 байт
Ответ: 36

Задача (Автомобильный номер)

В некоторой стране автомобильный номер состоит из 7 символов: сначала 2 буквы, затем 3 цифры, затем ещё 2 буквы. При этом буквы могут быть выбраны только из 12 строчных букв местного алфавита. Среди цифр не используются цифры 6 и 9. Автоматизированная система хранит номера автомобилей следующим образом. Используется посимвольное кодирование. В памяти системы для кодирования каждого символа используется минимально возможное и одинаковое целое количество бит (для букв и цифр отдельно). А для номера используется минимально возможное целое количество байт. Какое количество информации (в байтах) требуется для хранения номеров 160 автомобилей ?


Решение:

Найдём сколько бит потребуется для кодирования 4-х букв.

N = 2i = 24 бита = 16 > 12

4 бита хватит для кодирования 12 букв. Всего таких ячейки 4! Поэтому в одном номере на все буквы уйдёт 4 * 4 бита = 16 бит.

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


N = 2i = 23 бита = 8

Для кодирования одной ячейки, где находится цифра, потребуется 3 бита.

Все цифры в одном номере будут закодированы 3 бита * 3 = 9 битами.

Всего на один номер уйдёт 16 бит + 9 бит = 25 бит.

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


4 * 8 бит (1 байт) = 32 бита > 25 бит

4-х байт достаточно, чтобы закодировать 25 бит. Если взять 3 байта, то 3 * 8 бит (1 байт) = 24 бита. Этого будет не достаточно.

Найдём количество байт, которое нужно для кодирования 160 автомобилей


160 автомобилей * 4 байта = 640 байт

Это и будет ответ.


Ответ: 640

Задача (Закрепление формулы)

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


Решение:

Здесь, нужно закодировать сто одно число (от 0 до 100). Ситуация похоже на ту, где мы кодировали номера спортсменов.


N = 2i = 27 бит = 128 > 101

Получается, что 7 бит потребуется, чтобы полностью закодировать 101 число.

Всего было сделано 800 таких измерений


800 * 7 бит = 5600 бит = 700 байт
Ответ: 700

На этом всё! Удачи при решении 11 задания на ЕГЭ по информатике!


Что нужно знать каждому разработчику о кодировках и наборах символов для работы с текстом

Это первая часть перевода статьи What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text

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

Эта статья о кодировках и наборах символов.

Статья Джоеэля Спольски под названием «Абсолютный минимум о Unicode и наборе символов для каждого разработчика(без исключений!)» будет хорошей вводной и мне доставляет большое удовольствие перечитывать ее время от времени. Я стесняюсь отсылать к ней тех людей, которые испытывают трудности с пониманием проблем с кодировкам, хотя она довольно легкая в плане технических деталей. Я надеюсь, эта статья прольет немного света на то, чем именно являются кодировки, и почему все ваши тексты оказываются испорченными в самый ненужный момент. Статья предназначена для разработчиков(главным образом, на PHP), но пользу от нее может получить любой пользователь компьютера.

Основы

Все более или менее слышали об этом, но каким-то образом знание испаряется, когда дело доходит до обсуждения, так что вот вам: компьютер не может хранить буквы, числа, картинки или что-либо еще. Он может запомнить только биты. Бит имеет только два значения: ДА или НЕТ, ПРАВДА или ЛОЖЬ, 1 или 0 или любую другую пару, которую вы можете вообразить. Раз уж компьютер работает с электричеством, бит представлен электрическим зарядом: он либо есть, либо его нет. Людям проще представлять это в виде 1 и 0, так что я буду придерживаться этих обозначений.

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

01100010 01101001 01110100 01110011
b i t s

В этой кодировке, 01100010 представляет из себя ‘b’, 01101001 — ‘i’, 01110100 — ‘t’, 01110011 — ‘s’. Конкретная последовательность бит соответствует букве, а буква – конкретной последовательности битов. Если вы можете запомнить последовательности для 26 букв или умеете действительно быстро находить нужное соответствие, то вы сможете читать биты, как книги.
Упомянутая схема носит название ASCII. Строка с нолями и единицами разбивается на части по 8 бит(по байтам). Кодировка ASCII определяет таблицу перевода байтов в человеческие буквы. Вот небольшой кусочек этой таблицы:

bits character

01000001 A
01000010 B
01000011 C
01000100 D
01000101 E
01000110 F

В ней 95 символов, включая буквы от A до Z, в нижнем и верхнем регистре, цифры от 0 до 9, с десяток знаков препинания, амперсанд, знак доллара и прочие. В нее также включены 33 значения, такие как пробел, табуляция, перевод строки, возврат символа и прочие. Это непечатаемые символы, хотя они видимы человеку и используются им. Некоторые значения полезны только компьютеру, такие как коды начала и конца текста. Всего в кодировку ASCII включены 128 символов — прекрасное ровное число для тех, кто смыслит в компьютерах, так как оно использует все комбинации 7ми битов (от 0000000 до 1111111).

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

01001000 01100101 01101100 01101100 01101111 00100000
01010111 01101111 01110010 01101100 01100100

«Hello World»

Важные термины

Для кодирования чего-либо в ASCII двигайтесь справа налево, подменяя буквы на биты. Для декодирования битов в символы, следуйте по таблице слева направо, подменяя биты на буквы.

encode |enˈkōd|
verb [ with obj. ]
convert into a coded form
code |kōd|
noun
a system of words, letters, figures, or other symbols substituted for other words, letters, etc.

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

Прочие термины, заслуживающие прояснения:

Набор символов, чарсет, charset – Набор символов, который может быть закодирован. «Кодировка ASCII включает набор из 128 символов». Синоним к кодировке.

Кодовая страница – страница кодов, закрепляюшая за символом набор битов. Таблица. Синоним к кодировке.

Строка – пачка чего-нибудь, объединенных вместе. Битовая строка – это пачка бит, такая как 00011011. Символьная строка – это пачка символов, например «Вот эта». Синоним к последовательности.

Двоичный, восьмеричный, десятичный, шестнадцатеричный

Существует множество способов записывать числа. 10011111 – это бинарная запись для 237 в восьмеричной, 159 в десятичной и 9F в шестнадцатиричной системах. Значения у всех этих чисел одинаково, но шестнадцатиричная система короче и проще для понимания, чем двоичная. Я буду придерживаться двоичной системы в этой статье, чтобы улучшить понимание и убрать лишний уровень абстракции. Не пугайтесь, встречая коды символов в других нотациях, все значения эквиваленты.

Excusez-Moi?

Раз уж мы теперь знаем, о чем говорим, заметим: 95 символов – это совсем немного, когда речь идет о языках. Этот набор покрывает базовый английский, но как насчет французских символов? А вот это Straßen¬übergangs¬änderungs¬gesetz из немецкого языка? А приглашение на smörgåsbord в шведском? В-общем, не получится. Не в ASCII. Спецификация на представление é, ß, ü, ä, ö просто отсутствует.

“Постойте-ка”, скажут европейцы, “в обычных компьютерах с 8 битами в байте, ASCII никак не использует бит, который всегда равен 0! Мы можем использовать его, чтобы расширить таблицу еще на 128 значений”. И было так. Но способов обозначить звучание гласных еще слишком много. Не все сочетания букв и значений, используемые в европейских языках, влезают в таблицу из 256 записей. Так мир пришел к изобилию кодировок, стандартов, стандартов де-факто и недостандартов, которые покрывают все субнаборы символов. Кому-то понадобилось написать документ на шведском или чешском, и, не найдя нужной кодировки, просто изобрел еще одну. Или я думаю, что все так и произошло.

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

Многобайтные кодировки

Для создания таблиц, которые содержат более 256 символов, одного байта просто недостаточно. Двух байтов (16 бит) хватит для кодировки 65536 различных значений. Big-5 например, кодировка двухбайтная. Вместо разбиения последовательности битов в блоки по 8, она использует блоки по 16 битов и содержит большую(я имею ввиду БОЛЬШУЮ) таблицу с соответствием. Big-5 в своем основном виде покрывает большинство символов традиционного китайского. GB18030 – это похожая кодировка, но она включает как традиционный, так и упрощенный китайский. И, прежде чем вы спросите, да, есть кодировки только для упрощенного китайского. А разве одной недостаточно?

Вот кусок таблицы GB18030:

bits character
10000001 01000000 丂
10000001 01000001 丄
10000001 01000010 丅
10000001 01000011 丆
10000001 01000100 丏

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

Путаница с Unicode

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

Итак, и сколько же байт использует Unicode для кодирования? Нисколько. Потому что Unicode – это не кодировка.
Смущены? Не вы одни. Unicode в первую и главную очередь определяет таблицу пунктов для символов. Это такой способ сказать «65 – A, 66 – B, 9731 – »(я не шучу, так и есть). Как эти пункты кодируются в байты является предметом другого разговора. Для представления 1 114 112 значений двух байт недостаточно. Трех достаточно, но 3 – странное число, так что 4 является комфортным минимумом. Но, пока вы не используете китайский, или другой язык со множеством символов, которые требуют большого количества битов для кодирования, вам никогда не придет в голову использовать толстую колбасу из 4х байт. Если “A” всегда кодируется в 00000000 00000000 00000000 01000001, а “B” – в 00000000 00000000 00000000 01000010, то документ, использующий такую кодировку, распухнет в 4 раза.

Существует несколько способов решения этой проблемы. UTF-32 – это кодировка, которая переводит все символы в наборы из 32 бит. Это простой алгоритм, но изводящий много места впустую. UTF-16 и UTF-8 являются кодировками с переменной длиной кодирования. Если символ может быть закодирован одним байтом(потому что номер пункта символа очень маленький), UTF-8 закодирует его одним байтом. Если нужно 2 байта, то используется 2 байта. Кодировка сообщает старшими битами, сколькими битами кодируется текущий символ. Такой способ экономит место, но так же и тратит его в случае, если эти сигнальные биты часто используются. UTF-16 является компромиссом: все символы как минимум двухбайтные, но их размер может увеличиваться до 4 байт, если нужно.

character encoding bits
A UTF-8 01000001
A UTF-16 00000000 01000001
A UTF-32 00000000 00000000 00000000 01000001
あ UTF-8 11100011 10000001 10000010
あ UTF-16 00110000 01000010
あ UTF-32 00000000 00000000 00110000 01000010

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

Пункты

Символы определяются по их Unicode-пунктам. Эти пункты записаны в шестнадцатеричной системе и предварены “ U+” (просто для удобство, не значит ничего, кроме “Это пункт Unicode”). Символ Ḁ имеет пункт U+1E00. Иными(десятичными) словами, это 7680й символ таблицы Unicode. Он официально называется “ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА А С КОЛЬЦОМ СНИЗУ”.

Ниасилил

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

bits encoding characters

11000100 01000010 Windows Latin 1 ÄB
11000100 01000010 Mac Roman ƒB
11000100 01000010 GB18030 腂

characters encoding bits

Føö Windows Latin 1 01000110 11111000 11110110
Føö Mac Roman 01000110 10111111 10011010
Føö UTF-8 01000110 11000011 10111000 11000011 10110110

Заблуждения, смущения и проблемы

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

Какого черта мой текст нечитаем?

ÉGÉìÉRÅ[ÉfÉBÉìÉOÇÕìÔǵÇ≠ǻǢ

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

10000011 01000111 10000011 10010011 10000011 01010010 10000001 01011011
10000011 01100110 10000011 01000010 10000011 10010011 10000011 01001111
10000010 11001101 10010011 11101111 10000010 10110101 10000010 10101101
10000010 11001000 10000010 10100010

Так, быстренько угадали кодировку? Если вы пожали плечами, то вы правы. Да кто знает?
Попробуем с ASCII. Большая часть этих байтов начинается с 1. Если вы правильно помните, ASCII вообще-то не использует этот бит. Так что ASCII не вариант. Как насчет UTF-8? Большая часть байт не является валидными значениями в этой кодировке. Как насчет Mac Roman(еще одна европейская кодировка)? Хм, для нее эти байты являются правильными значениями. 10000011 декодируетися в ”É”, в “G” и так далее. Так что в Mac Roman текст будет выглядеть так: ÉGÉìÉRÅ[ÉfÉBÉìÉOÇÕìÔǵÇ≠ǻǢ. Правильно? Нет? Может быть? А компьютер-то откуда знает? Может кто-то хотел написать именно это. Насколько я знаю, это может быть последовательностью ДНК! Так и порешим: это Mac Roman, и это ДНК.

Конечно, это полный бред. Правильный ответ таков: текст закодирован в Japanes Shift-JIS и должен выглядеть как エンコーディングは難しくない. Кто бы мог подумать?
Первая причина нечитаемости текста в том, что кто-то пытается прочитать последовательность байт в неверной кодировке. Компьютеру всегда нужно подсказывать. Сам он не догадается. Некоторые типы документов определяют кодировку своего содержимого, но последовательность байт всегда остается черным ящиком.
Большинство браузеров предоставляют возможность указать кодировку страницы с помощью специального пункта меню. Иные программы тоже имеют аналогичные пункты.

У автора нет разбиения на части, но статья и так длинна. Продолжение будет через пару дней.

Кодировок символов для начинающих

Во-первых, какое мне дело?

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

Например, вы можете сделать так, чтобы текст выглядел так:

, но на самом деле он может отображаться так:

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

Так что за кодировка символов?

Слова и предложения в тексте состоят из знаков . Примеры символов включают латинскую букву á, китайскую идеограмму 請 или символ деванагари ह.

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

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

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

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

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

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

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

Однако в большинстве случаев вам не нужно знать подробности. Вам просто нужно быть уверенным, что вы прислушиваетесь к советам в раздел Как это влияет на меня? ниже.

Как в это вписываются шрифты?

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

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

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

Как это повлияет на меня?

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

Авторы контента должны узнать, как объявить персонажа кодировка, используемая для формата документа, с которым они работают.

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

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

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

По ссылкам ниже можно найти дополнительную информацию по этим темам.

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

Обратите внимание, что номера кодовых точек обычно выражаются в шестнадцатеричной системе счисления, т.е. основание 16. Например, 233 в шестнадцатеричной форме — это E9.Значения кодовой точки Unicode обычно записываются в форме U + 00E9.

В наборе кодированных символов под названием ISO 8859-1 (также известном как Latin1) значение десятичной кодовой точки для буквы é равно 233. Однако в ISO 8859-5, та же кодовая точка представляет кириллический символ щ.

Эти наборы символов содержат менее 256 символов и отображают кодовые точки в байтовые значения напрямую, поэтому кодовая точка со значением 233 представлена ​​одним байтом со значением 233.Обратите внимание, что только контекст определяет, представляет ли этот байт é или.

Есть и другие способы обработки символов из ряда сценариев. Например, с набором символов Unicode вы можете представить оба символа в одном наборе. Фактически, Unicode содержит в одном наборе, вероятно, все символы, которые вам когда-либо понадобятся. Хотя буква é по-прежнему представлена ​​значением кодовой точки 233, кириллический символ щ теперь имеет значение кодовой точки 1097.

С другой стороны, 1097 — слишком большое число, чтобы его можно было представить одним байт*. Итак, если вы используете кодировку символов для текста Unicode под названием UTF-8, щ будет представлен двумя байтами. Тем не менее значение кодовой точки не просто выводится из значения двух байтов, соединенных вместе — требуется более сложное декодирование.

Другой Юникод символы отображаются в один, три или четыре байта в кодировке UTF-8.

Кроме того, обратите внимание, что буква é также представлена ​​двумя байтами в UTF-8, а не одним байтом, используемым в ISO 8859-1. (Только символы ASCII кодируются одним байтом в UTF-8.)

UTF-8 — это наиболее широко используемый способ представления текста Unicode на веб-страницах, и вы всегда должны использовать UTF-8 при создании веб-страниц и баз данных. Но, в принципе, UTF-8 — лишь один из возможных способов кодирования. Символы Юникода. Другими словами, одна кодовая точка в наборе символов Unicode может фактически отображаться в разные последовательности байтов, в зависимости от какая кодировка использовалась для документа.Кодовые точки Unicode могут быть сопоставлены с байтами с использованием любой из кодировок, называемых UTF-8, UTF-16 или UTF-32. Символ деванагари क с кодовой точкой 2325 (что составляет 915 в шестнадцатеричной системе счисления) будет представлен двумя байтов при использовании кодировки UTF-16 (09 15), трех байтов с UTF-8 (E0 A4 95) или четырех байтов с UTF-32 (00 00 09 15).

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

.

Выбор и применение кодировки символов

Выбор и применение кодировки символов

Целевая аудитория: Кодировщики HTML (использующие редакторы или сценарии), разработчики сценариев (PHP, JSP и т. Д.), Кодировщики CSS, менеджеры веб-проектов и все, кто плохо знаком с кодировками символов и нуждается в введении в то, как выбирать и применять кодировки символов.

Какую кодировку символов я должен использовать для своего контента и как применить ее к моему контенту?

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

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

Если вам нужно лучше понять, что такое символы и кодировки символов, см. Статью Кодировки символов для начинающих .

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

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

Проверьте, повлияют ли на ваш выбор настройки HTTP-сервера.

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

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

Применение кодировки к вашему контенту

Авторы контента должны объявить кодировку символов своих страниц, используя один из методов, описанных в Объявление кодировок символов в HTML .

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

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

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

Для получения информации о «Форме нормализации Unicode» см. Нормализация в HTML и CSS . Для получения информации о «Подпись Unicode (BOM)» см. Метка порядка байтов (BOM) в HTML .

Вам также может потребоваться проверить, что ваш сервер обслуживает документы с правильными декларациями HTTP, поскольку в противном случае он переопределит информацию в документе (см. Ниже).

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

Зачем использовать UTF-8?

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

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

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

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

В наши дни все препятствия для использования Unicode очень низки. Фактически, в январе 2012 года Google сообщил, что более 60% Интернета в их выборке из нескольких миллиардов страниц теперь используют UTF-8.Добавьте к этому цифру для веб-страниц, содержащих только ASCII (поскольку ASCII является подмножеством UTF-8), и эта цифра возрастет примерно до 80%.

Существует три различных кодировки символов Unicode: UTF-8, UTF-16 и UTF-32. Из этих трех только UTF-8 следует использовать для веб-содержимого. Спецификация HTML5 гласит: «Авторам рекомендуется использовать UTF-8. Средства проверки соответствия могут посоветовать авторам не использовать устаревшие кодировки. Инструменты разработки по умолчанию должны использовать UTF-8 для вновь создаваемых документов».

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

Принимая во внимание HTTP-заголовок

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

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

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

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

Что делать, если я не могу использовать UTF-8?

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

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

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

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

Избегайте этих кодировок

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

Документы не должны использовать JIS_C6226-1983 , JIS_X0212-1990 , HZ-GB-2312 , JOHAB (кодовая страница Windows 1361), кодировки на основе ISO-2022 или кодировки на основе EBCDIC .Это связано с тем, что они позволяют кодовым точкам ASCII представлять символы, отличные от ASCII, что создает угрозу безопасности.

Документы также не должны использовать кодировки CESU-8 , UTF-7 , BOCU-1 или SCSU , поскольку они никогда не предназначались для веб-контента, а спецификация HTML5 запрещает браузерам их распознавать.

Спецификация также настоятельно не рекомендует использовать UTF-16 , а использование UTF-32 «особенно не рекомендуется».

Также следует избегать других кодировок символов, перечисленных в спецификации Encoding . К ним относятся кодировки Big5 и EUC-JP , которые имеют проблемы совместимости. ISO-8859-8 (кодировка на иврите для визуально упорядоченного текста) также следует избегать в пользу кодировки, которая работает с логически упорядоченным текстом (например, UTF-8 или в противном случае ISO-8859-8-i).

Кодировка , заменяющая кодировку , указанная в спецификации Encoding , на самом деле не является кодировкой; это запасной вариант, который отображает каждый октет в кодовую точку Unicode U + FFFD REPLACEMENT CHARACTER.Очевидно, что передавать данные в такой кодировке бесполезно.

Определяемая пользователем кодировка x — это однобайтовая кодировка, нижняя половина которой является ASCII, а верхняя половина отображается в область частного использования Unicode (PUA). Как и в случае с PUA в целом, лучше избегать использования этой кодировки в общедоступном Интернете, потому что это ухудшает совместимость и долгосрочное использование.

.

Безболезненное руководство — Настоящий Python

Работа с кодировками символов в Python или любом другом языке временами может показаться болезненной. В таких местах, как Stack Overflow, есть тысячи вопросов, возникающих из-за путаницы с исключениями, такими как UnicodeDecodeError и UnicodeEncodeError . Это руководство предназначено для устранения тумана Exception и демонстрации того, что работа с текстовыми и двоичными данными в Python 3 может быть удобной. Поддержка Unicode в Python сильна и надежна, но для ее освоения требуется время.

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

По окончании этого руководства вы получите:

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

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

Примечание : эта статья ориентирована на Python 3. В частности, все примеры кода в этом руководстве были созданы из оболочки CPython 3.7.2, хотя все второстепенные версии Python 3 должны вести себя (в основном) одинаково при обработке текста.

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

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

Существуют десятки, если не сотни кодировок символов.Лучший способ понять, что это такое, — рассмотреть одну из простейших кодировок символов, ASCII.

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

Включает:

  • Строчные английские буквы : a от до z
  • Заглавные английские буквы : A от до Z
  • Некоторые знаки препинания и символы : "$" и "!" , чтобы назвать пару
  • Пробельные символы : фактический пробел ( "" ), а также перевод строки, возврат каретки, горизонтальная табуляция, вертикальная табуляция и некоторые другие
  • Некоторые непечатаемые символы : символы, такие как backspace, "\ b" , которые нельзя напечатать буквально так, как буква A может

Итак, какое более формальное определение кодировки символов?

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

Т

.

Ссылка на кодирование URL-адресов HTML


URL — унифицированный указатель ресурсов

Веб-браузеры запрашивают страницы с веб-серверов, используя URL-адрес.

URL-адрес — это адрес веб-страницы, например: https://www.w3schools.com.


Кодировка URL (процентное кодирование)

Кодировка

URL преобразует символы в формат, который можно передавать через Интернет.

URL-адресов можно отправлять только через Интернет с помощью Набор символов ASCII.

Поскольку URL-адреса часто содержат символы вне набора ASCII, URL-адрес должен быть преобразован в допустимый формат ASCII.

Кодировка

URL заменяет небезопасные символы ASCII на «%», за которым следуют два шестнадцатеричные цифры.

URL-адреса не могут содержать пробелов. Кодировка URL-адреса обычно заменяет пробел на знак плюса (+) или% 20.


Попробуйте сами

Если вы нажмете кнопку «Отправить» ниже, браузер закодирует ввод перед отправкой на сервер.Страница на сервере отобразит полученные ввод.

Попробуйте ввести другие данные и снова нажмите «Отправить».


Функции кодирования URL

В JavaScript, PHP и ASP есть функции, которые можно использовать для URL закодировать строку.

PHP имеет функцию rawurlencode (), а ASP — функцию Server.URLEncode ().

В JavaScript вы можете использовать функцию encodeURIComponent () .

Нажмите кнопку «Кодировать URL», чтобы увидеть, как функция JavaScript кодирует текст.

Примечание: Функция JavaScript кодирует пробел как% 20.



Ссылка на кодировку ASCII

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

Набор символов по умолчанию в HTML5 — UTF-8.

Символ из Windows-1252 из UTF-8
место % 20 % 20
! % 21 % 21
« % 22 % 22
# % 23 % 23
$ % 24 % 24
% % 25 % 25
и % 26 % 26
% 27 % 27
( % 28 % 28
) % 29 % 29
* % 2A % 2A
+ % 2B % 2B
, % 2C % 2C
% 2D % 2D
. % 2Э % 2Э
/ % 2Ф % 2Ф
0 % 30 % 30
1 % 31 % 31
2 % 32 % 32
3 % 33 % 33
4 % 34 % 34
5 % 35 % 35
6 % 36 % 36
7 % 37 % 37
8 % 38 % 38
9 % 39 % 39
: % 3A % 3A
; % 3B % 3B
< % 3C % 3C
= % 3D % 3D
> % 3Э % 3Э
? % 3F % 3F
@ % 40 % 40
А % 41 % 41
B % 42 % 42
С % 43 % 43
D % 44 % 44
E % 45 % 45
F % 46 % 46
G % 47 % 47
H % 48 % 48
I % 49 % 49
Дж % 4A % 4A
К % 4B % 4B
л % 4C % 4C
M % 4D % 4D
N % 4Э % 4Э
O % 4 этаж % 4 этаж
п. % 50 % 50
Q % 51 % 51
R % 52 % 52
S % 53 % 53
т % 54 % 54
U % 55 % 55
В % 56 % 56
Вт % 57 % 57
х % 58 % 58
Y % 59 % 59
Z % 5A % 5A
[ % 5B % 5B
\ % 5C % 5C
] % 5D % 5D
^ % 5E % 5E
_ % 5F % 5F
` % 60 % 60
a % 61 % 61
б % 62 % 62
с % 63 % 63
г % 64 % 64
e % 65 % 65
f % 66 % 66
г % 67 % 67
ч % 68 % 68
i % 69 % 69
j % 6A % 6A
к % 6B % 6B
л % 6C % 6C
м % 6D % 6D
n % 6E % 6E
или % 6F % 6F
p % 70 % 70
q % 71 % 71
r % 72 % 72
с % 73 % 73
т % 74 % 74
u % 75 % 75
в % 76 % 76
Вт % 77 % 77
х % 78 % 78
y % 79 % 79
z % 7A % 7A
{ % 7B % 7B
| % 7C % 7C
} % 7D % 7D
~ % 7E % 7E
% 7F % 7F
` % 80 % E2% 82% AC
% 81 % 81
% 82 % E2% 80% 9A
ƒ % 83 % C6% 92
% 84 % E2% 80% 9E
% 85 % E2% 80% A6
% 86 % E2% 80% A0
% 87 % E2% 80% A1
ˆ % 88 % CB% 86
% 89 % E2% 80% B0
Š % 8A % C5% A0
% 8B % E2% 80% B9
Π% 8C % C5% 92
% 8D % C5% 8D
Ž % 8E % C5% BD
% 8F % 8F
% 90 % C2% 90
% 91 % E2% 80% 98
% 92 % E2% 80% 99
% 93 % E2% 80% 9C
% 94 % E2% 80% 9D
% 95 % E2% 80% A2
% 96 % E2% 80% 93
% 97 % E2% 80% 94
˜ % 98 % CB% 9C
% 99 % E2% 84
š % 9A % C5% A1
% 9В % E2% 80
œ % 9C % C5% 93
% 9D % 9D
× % 9E % C5% BE
Ÿ % 9F % C5% B8
% A0 % C2% A0
¡ % A1 % C2% A1
¢ % A2 % C2% A2
£ % A3 % C2% A3
¤ % A4 % C2% A4
¥ % A5 % C2% A5
¦ % A6 % C2% A6
§ % A7 % C2% A7
¨ % A8 % C2% A8
© % A9 % C2% A9
ª % AA % C2% AA
« % AB % C2% AB
¬ % AC % C2% AC
% нашей эры % C2% AD
® % AE % C2% AE
¯ % AF % C2% AF
° % B0 % C2% B0
± % B1 % C2% B1
² % B2 % C2% B2
³ % B3 % C2% B3
´ % B4 % C2% B4
мкм % B5 % C2% B5
% B6 % C2% B6
· % B7 % C2% B7
¸ % B8 % C2% B8
¹ % B9 % C2% B9
º % BA % C2% BA
» % BB % C2% BB
¼ % BC % C2% BC
½ % BD % C2% BD
¾ % BE % C2% BE
¿ % BF % C2% BF
À % C0 % C3% 80
Á % C1 % C3% 81
 % C2 % C3% 82
à % C3 % C3% 83
Ä % C4 % C3% 84
Å % C5 % C3% 85
Æ % C6 % C3% 86
Ç % C7 % C3% 87
È % C8 % C3% 88
É % C9 % C3% 89
Ê % CA % C3% 8A
Ë % CB % C3% 8B
Ì % CC % C3% 8C
Í % CD % C3% 8D
Î % CE % C3% 8E
Ï % CF % C3% 8F
ì % D0 % C3% 90
Ñ % D1 % C3% 91
Ò % D2 % C3% 92
Ó % D3 % C3% 93
Ô % D4 % C3% 94
Õ % D5 % C3% 95
Ö % D6 % C3% 96
× % D7 % C3% 97
Ø % D8 % C3% 98
Ù % D9 % C3% 99
Ú % DA % C3% 9A
Û % DB % C3% 9B
Ü % ПВ % C3% 9C
Ý % DD % C3% 9D
Þ % DE % C3% 9E
ß % DF % C3% 9F
до % E0 % C3% A0
á % E1 % C3% A1
â % E2 % C3% A2
ã % E3 % C3% A3
ä % E4 % C3% A4
å % E5 % C3% A5
æ % E6 % C3% A6
ç % E7 % C3% A7
и % E8 % C3% A8
é % E9 % C3% A9
ê % EA % C3% AA
ë % EB % C3% AB
мм % EC % C3% AC
до % ПВ % C3% AD
до % EE % C3% AE
% EF % C3% AF
ð % F0 % C3% B0
ñ % F1 % C3% B1
шт % F2 % C3% B2
ó % F3 % C3% B3
ô % F4 % C3% B4
х % F5 % C3% B5
ö % F6 % C3% B6
÷ % F7 % C3% B7
ø % F8 % C3% B8
ù % F9 % C3% B9
ú % FA % C3% BA
û % FB % C3% BB
ü % FC % C3% BC
ý % FD % C3% BD
þ % FE % C3% BE
ÿ % FF % C3% BF

Ссылка на кодирование URL

Управляющие символы ASCII % 00-% 1F изначально были разработаны для аппаратные устройства управления.

Управляющим символам нечего делать внутри URL.

Символ ASCII Описание Кодировка URL
NUL нулевой символ % 00
SOH начало заголовка % 01
STX начало текста % 02
ETX конец текста % 03
EOT конец передачи % 04
ENQ запрос % 05
ACK подтвердить % 06
БЕЛ звонок (кольцо) % 07
BS возврат % 08
HT горизонтальный язычок % 09
LF перевод строки % 0A
VT вертикальный язычок % 0B
FF подача формы % 0C
CR возврат каретки % 0D
SO сдвиг % 0E
SI смена % 0F
DLE выход канала передачи данных % 10
DC1 Устройство управления 1 % 11
DC2 Устройство управления 2 % 12
DC3 Устройство управления 3 % 13
DC4 Устройство управления 4 % 14
НАК отрицательное подтверждение % 15
SYN синхронизировать % 16
ЭТБ блок передачи конца % 17
CAN отменить % 18
EM конец среднего % 19
ПОД заменить % 1A
ESC побег % 1B
ФС разделитель файлов % 1С
GS разделитель групп % 1D
RS разделитель записей % 1Э
США блок сепаратора % 1 этаж


.

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

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