Каким образом осуществляется двоичное кодирование текстовой информации? Приведите пример
1. Вводить строку, состоящую из трех слов, разделенных пробелами. 2. В первом слове введенной строки посчитать количество букв “а”. 3. Во втором слове … заменить все символы “а” на символы “А”. Если таких нет, то вывести сообщение об ошибке 4. Узнать длину третьего слова. 5. Всю полученную информацию вывести на экран.
Cрочно помогитее!! с решениемм пожалуйста Представьте число -35 в двоичном виде в восьмибитовом представлении в формате целого со знаком.
Составьте программу рисования узора, показанного на рисунке. Количество повторений элементов узора по вертикали и горизонтали задается пользователем.
Начертите белым цветом контур буквы «Ц». Размеры буквы – произвольные.
Составьте программу рисования фигуры, изображенной на рисунке, таким образом, чтобы во время рисования перо не отрывалось от бумаги, и ни одна линия н … е проводилась дважды.
Составьте программу рисования прямоугольника со сторонами, параллельными осям координат, и вершинами в точках (2; -2) и (-1; 5).
что такое жёсткий диск?
Сообщающиеся сосуды | С++ 80 баллов даю. Сегодня на уроке физики рассказывали удивительные вещи. Придя домой, Витя решил проверить слова учителя о том … , что если взять два одинаковых сосуда, соединённых тонкой трубкой на уровне основания, то уровень жидкости при любом её количестве также будет одинаковым для обоих сосудов. Способ убедиться в правильности утверждения Витя избрал довольно оригинальный. Он взял аквариум с основанием длиной N и шириной 1, очень высокими стенками и поставил N–1 перегородок параллельно узкой боковой стенке аквариума, тем самым разделив аквариум на N одинаковых отсеков. Каждая перегородка имеет ширину 1 и очень большую высоту. Толщиной перегородки можно пренебречь. В каждой из перегородок есть точечное отверстие на высоте Hi, диаметром которого также можно пренебречь. После всех этих приготовлений Витя медленно наливает в первый отсек (между стенкой и первой перегородкой) C литров воды. В часть аквариума размером 1×1×1 вмещается ровно один литр воды. Так как стенки и перегородки в аквариуме были очень высокими, то через край вода не переливалась. После установления стационарного состояния он замерил уровень жидкости в каждом из N сосудов. Теперь он хочет убедиться, что его экспериментальные данные не опровергают законы, рассказанные на уроке. Он обратился к вам с просьбой выяснить, какой должна быть высота жидкости в каждом из сосудов с теоретической точки зрения. Рассмотрим подробно случай N=3. Пусть сначала h2 h3. Как только жидкость в первом отсеке достигнет уровня первого отверстия, вся вода станет поступать во второй отсек. Если после этого уровень во втором отсеке сравняется с уровнем второго отверстия, то вода станет выливаться в третий до тех пор, пока высоты жидкостей во втором и третьем отсеках не станут равными. Далее уровень воды в них будет равномерно увеличиваться, пока не достигнет первого отверстия. После этого весь аквариум будет заполняться равномерно. Входные данные В первой строке записаны целые N и C (1≤N≤100000, 0≤C≤2⋅109). В следующих N–1 строках содержится по одному целому числу Hi (0≤Hi≤2⋅109), обозначающему высоту отверстия в i-й перегородке. Выходные данные Выведите N чисел, каждое на новой строке, с точностью до шести знаков после десятичной точки — уровень жидкости в 1,2,…,N отсеке соответственно. Примеры Ввод 1 4 4 3 2 1 Вывод 3.00000000000000000000 1.00000000000000000000 0.00000000000000000000 0.00000000000000000000 ТОЛЬКО НА С++
Завдання No1 Вказування імені змінної та її типу називають Обери один варіант :Проголошення Оголошення Афірмація Спеціалізація
Меньше среднего.C++ Дан массив A из N элементов. Требуется найти и вывести количество элементов, значение которых меньше среднего арифметического знач … ения элементов массива.
Двоичное кодирование информации
Двоичное кодирование информацииДвоичное кодирование информации.
Вся информация, которую обрабатывает компьютер должна быть представлена двоичным кодом с помощью двух цифр 0 и 1. Эти два символа принято называть двоичными цифрами или битами. С помощью двух цифр 0 и 1 можно закодировать любое сообщение. Это явилось причиной того, что в компьютере обязательно должно быть организованно два важных процесса: кодирование и декодирование.
Кодирование – преобразование входной информации в форму, воспринимаемую компьютером, т.е. двоичный код.
Декодирование – преобразование данных из двоичного кода в форму, понятную человеку.
Система счисления — способ записи чисел с помощью набора специальных знаков, называемых цифрами.
Система счисления | Основание | Алфавит цифр |
Десятичная | 10 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 |
Двоичная | 2 | 0, 1 |
Восьмеричная | 8 | 0, 1, 2, 3, 4, 5, 6, 7 |
Шестнадцатеричная | 16 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F |
Десятичная система счисления — позиционная система счисления по основанию 10. Предполагается, что основание 10 связано с количеством пальцев рук у человека. Наиболее распространённая система счисления в мире. Для записи чисел используются символы 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, называемые арабскими цифрами.
Двоичная система счисления — позиционная система счисления с основанием 2. Используются цифры 0 и 1. Двоичная система используется в цифровых устройствах, поскольку является наиболее простой.
Двоичная система счисления обладает такими же свойствами, что и десятичная, только для представления чисел используются не 10 цифр, а всего две. Соответственно и разряд числа называют не десятичным, а двоичным.
Перевод из десятичной системы счисления в систему счисления с основанием p осуществляется последовательным делением десятичного числа и его десятичных частных на p, а затем выписыванием последнего частного и остатков в обратном порядке.
Переведем десятичное число 20 в двоичную систем счисления (основание системы счисления p=2).
В итоге получили 2010 = 101002.
Двоичное кодирование текстовой информации
Начиная с 60-х годов, компьютеры все больше стали использовать для обработки текстовой информации и в настоящее время большая часть ПК в мире занято обработкой именно текстовой информации.
Традиционно для кодирования одного символа используется количество информации = 1 байту (1 байт = 8 битов).
Для кодирования одного символа требуется один байт информации.
Учитывая, что каждый бит принимает значение 1 или 0, получаем, что с помощью 1 байта можно закодировать 256 различных символов. (28 = 256)
Кодирование заключается в том, что каждому символу ставится в соответствие уникальный двоичный код от 00000000 до 11111111 (или десятичный код от 0 до 255).
Важно, что присвоение символу конкретного кода – это вопрос соглашения, которое фиксируется кодовой таблицей.
Таблица, в которой всем символам компьютерного алфавита поставлены в соответствие порядковые номера (коды), называется таблицей кодировки.
Кодирование изображений
Создавать и хранить графические объекты в компьютере можно двумя способами – как растровое или как векторное изображение. Для каждого типа изображений используется свой способ кодирования.
Кодирование растровых изображений
Растровое изображение представляет собой совокупность точек (пикселей) разных цветов. Пиксель — минимальный участок изображения, цвет которого можно задать независимым образом.
В процессе кодирования изображения производится его пространственная дискретизация. Пространственную дискретизацию изображения можно сравнить с построением изображения из мозаики (большого количества маленьких разноцветных стекол). Изображение разбивается на отдельные маленькие фрагменты (точки), причем каждому фрагменту присваивается значение его цвета, то есть код цвета (красный, зеленый, синий и так далее).
Для черно-белого изображения информационный объем одной точки равен одному биту (либо черная, либо белая – либо 1, либо 0).
Для четырех цветного – 2 бита.
Для 8 цветов необходимо – 3 бита.
Для 16 цветов – 4 бита.
Для 256 цветов – 8 бит (1 байт).
Качество изображения зависит от количества точек (чем меньше размер точки и, соответственно, больше их количество, тем лучше качество) и количества используемых цветов (чем больше цветов, тем качественнее кодируется изображение). Растровые изображения очень чувствительны к масштабированию (увеличению или уменьшению). При уменьшении растрового изображения несколько соседних точек преобразуются в одну, поэтому теряется различимость мелких деталей изображения. При увеличении изображения увеличивается размер каждой точки и появляется ступенчатый эффект, который можно увидеть невооруженным глазом.
Кодирование векторных изображений
Векторное изображение представляет собой совокупность графических примитивов (точка, отрезок, эллипс…). Каждый примитив описывается математическими формулами. Кодирование зависит от прикладной среды.
Достоинством векторной графики является то, что файлы, хранящие векторные графические изображения, имеют сравнительно небольшой объем.
Важно также, что векторные графические изображения могут быть увеличены или уменьшены без потери качества.
Кодирование информации
Общие понятия
Определение 1
Кодирование — это преобразование информации из одной ее формы представления в другую, наиболее удобную для её хранения, передачи или обработки.
Кодом называют правило отображения одного набора знаков в другом.
Двоичный код – это способ представления информации с помощью двух символов — 0 и 1.
Определение 2
Длина кода – это количество знаков, используемых для представления кодируемой информации.
Бит — это одна двоичная цифра 0 или 1. Одним битом можно закодировать два значения: 1 или 0. Двумя битами можно закодировать уже четыре значения: 00, 01, 10, 11. Тремя битами кодируются 8 разных значений. Добавление одного бита удваивает количество значений, которое можно закодировать.
Виды кодирования информации
Различают кодирование информации следующих видов:
- Кодирование текстовой информации;
- Кодирование цвета;
- Кодирование графической информации;
- Кодирование числовой информации;
- Кодирование звуковой информации;
- Кодирование видеозаписи.
Кодирование текстовой информации
Любой текст (к примеру, студенческий реферат) состоит из последовательности символов. Символами могут быть буквы, цифры, знаки препинания, знаки математических действий, круглые и квадратные скобки и т.д.
Текстовая информация, как и любая другая, хранится в памяти компьютера в двоичном виде. Для этого каждому ставится в соответствии некоторое неотрицательное число, называемое кодом символа, и это число записывается в память ЭВМ в двоичном виде. Конкретное соотношение между символами и их кодами называется системой кодировки. В персональных компьютерах обычно используется система кодировки ASCII (American Standard Code for Informational Interchange – Американский стандартный код для информационного обмена).
Готовые работы на аналогичную тему
Разработчики программного обеспечения создали собственные 8-битные стандарты кодировки текста. За счет дополнительного бита диапазон кодирования в них был расширен до 256 символов. Чтобы не было путаницы, первые 128 символов в таких кодировках, как правило, соответствуют стандарту ASCII. Оставшиеся 128 — реализуют региональные языковые особенности.
Восьмибитными кодировками, распространенными в нашей стране, являются KOI8, UTF8, Windows-1251 и некоторые другие.
Кодирование цвета
Чтобы сохранить в двоичном коде фотографию, ее сначала виртуально разделяют на множество мелких цветных точек, называемых пикселями (что-то на подобии мозаики). После разбивки на точки цвет каждого пикселя кодируется в бинарный код и записывается на запоминающем устройстве.
Если говорят, что размер изображения составляет, например, х 512х512 точек, это значит, что оно представляет собой матрицу, сформированную из 262144 пикселей (количество пикселей по вертикали, умноженное на количество пикселей по горизонтали).
Прибором, «разбивающим» изображения на пиксели, является любая современная фотокамера (в том числе веб-камера, камера телефона) или сканер. И если в характеристиках камеры значится, например, «10 Mega Pixels», значит количество пикселей, на которые эта камера разбивает изображение для записи в двоичном коде, — 10 миллионов. Чем на большее количество пикселей разделено изображение, тем реалистичнее выглядит фотография в декодированном виде (на мониторе или после распечатывания).
Однако качество кодирования фотографий в бинарный код зависит не только от количества пикселей, но также и от их цветового разнообразия. Алгоритмов записи цвета в двоичном коде существует несколько. Самым распространенным из них является RGB. Эта аббревиатура – первые буквы названий трех основных цветов: красного – англ.Red, зеленого – англ. Green, синего – англ. Blue. Смешивая эти три цвета в разных пропорциях, можно получить любой другой цвет или оттенок.
На этом и построен алгоритм RGB. Каждый пиксель записывается в двоичном коде путем указания количества красного, зеленого и синего цвета, участвующего в его формировании.
Чем больше битов выделяется для кодирования пикселя, тем больше вариантов смешивания этих трех каналов можно использовать и тем значительнее будет цветовая насыщенность изображения.
Замечание 1
Цветовое разнообразие пикселей, из которых состоит изображение, называется глубиной цвета.
Кодирование графической информации
Описанная выше техника формирования изображений из мелких точек является наиболее распространенной и называется растровой. Но кроме растровой графики, в компьютерах используется еще и так называемая векторная графика.
Векторные изображения создаются только при помощи компьютера и формируются не из пикселей, а из графических примитивов (линий, многоугольников, окружностей и др.).
Векторная графика — это чертежная графика. Она очень удобна для компьютерного «рисования» и широко используется дизайнерами при графическом оформлении печатной продукции, в том числе создании огромных рекламных плакатов, а также в других подобных ситуациях. Векторное изображение в двоичном коде записывается как совокупность примитивов с указанием их размеров, цвета заливки, места расположения на холсте и некоторых других свойств.
Чтобы записать на запоминающем устройстве векторное изображение круга, компьютеру достаточно в двоичный код закодировать тип объекта (окружность), координаты его центра на холсте, длину радиуса, толщину и цвет линии, цвет заливки. В растровой системе пришлось бы кодировать цвет каждого пикселя. И если размер изображения большой, для его хранения понадобилось бы значительно больше места на запоминающем устройстве.
Тем не менее, векторный способ кодирования не позволяет записывать в двоичном коде реалистичные фото. Поэтому все фотокамеры работают только по принципу растровой графики. Рядовому пользователю иметь дело с векторной графикой в повседневной жизни приходится не часто.
Кодирование числовой информации
При кодировании чисел учитывается цель, с которой цифра была введена в систему: для арифметических вычислений или просто для вывода. Все данные, кодируемые в двоичной системе, шифруются с помощью единиц и нолей. Эти символы еще называют битами. Этот метод кодировки является наиболее популярным, ведь его легче всего организовать в технологическом плане: присутствие сигнала – 1, отсутствие – 0. У двоичного шифрования есть лишь один недостаток – это длина комбинаций из символов. Но с технической точки зрения легче орудовать кучей простых, однотипных компонентов, чем малым числом более сложных.
Целые числа кодируются просто переводом чисел из одной системы счисления в другую. Для кодирования действительных чисел используют 80-разрядное кодирование. При этом число преобразуют в стандартный вид.
Кодирование звуковой информации
Любой звук, слышимый человеком, является колебанием воздуха, которое характеризируется двумя основными показателями: частотой и амплитудой. Амплитуда колебаний — это степень отклонения состояния воздуха от начального при каждом колебании. Она воспринимается нами как громкость звука. Частота колебаний — это количество отклонений состояний воздуха от начального за единицу времени. Она воспринимается как высота звука. Так, тихий комариный писк — это звук с высокой частотой, но с небольшой амплитудой. Звук грозы наоборот имеет большую амплитуду, но низкую частоту.
Схему работы компьютера со звуком в общих чертах можно описать так. Микрофон превращает колебания воздуха в аналогичные по характеристикам электрических колебаний. Звуковая карта компьютера преобразовывает электрические колебания в двоичный код, который записывается на запоминающем устройстве. При воспроизведении такой записи происходит обратный процесс (декодирование) — двоичный код преобразуется в электрические колебания, которые поступают в аудиосистему или наушники. Динамики акустической системы или наушников имеют противоположное микрофону действие. Они превращают электрические колебания в колебания воздуха.
Принцип разделения звуковой волны на мелкие участки лежит в основе двоичного кодирования звука. Аудиокарта компьютера разделяет звук на очень мелкие временные участки и кодирует степень интенсивности каждого из них в двоичный код. Такое дробление звука на части называется дискретизацией. Чем выше частота дискретизации, тем точнее фиксируется геометрия звуковой волны и тем качественней получается запись.
Качество записи сильно зависит также от количества битов, используемых компьютером для кодирования каждого участка звука, полученного в результате дискретизации. Количество битов, используемых для кодирования каждого участка звука, полученного при дискретизации, называется глубиной звука.
Кодирование видеозаписи
Видеозапись состоит из двух компонентов: звукового и графического.
Кодирование звуковой дорожки видеофайла в двоичный код осуществляется по тем же алгоритмам, что и кодирование обычных звуковых данных. Принципы кодирования видеоизображения схожи с кодированием растровой графики (рассмотрено выше), хотя и имеют некоторые особенности. Как известно, видеозапись — это последовательность быстро меняющихся статических изображений (кадров). Одна секунда видео может состоять из 25 и больше картинок. При этом, каждый следующий кадр лишь незначительно отличается от предыдущего.
Учитывая эту особенность, алгоритмы кодирования видео, как правило, предусматривают запись лишь первого (базового) кадра. Каждый же последующий кадр формируются путем записи его отличий от предыдущего.
Двоичное кодирование и компьютер.
В конце ХХ века, века компьютеризации, человечество пользуется двоичной системой ежедневно, так как вся информация, обрабатываемая современными ЭВМ, хранится в них в двоичном виде.
Каким же образом осуществляется это хранение?
Каждый регистр арифметического устройства ЭВМ, каждая ячейка памяти представляют собой физическую систему, состоящую из некоторого числа однородных элементов. Любой такой элемент способен находиться в нескольких состояниях и служит для изображения одного из разрядов числа. Именно поэтому каждый элемент ячейки называют разрядом.
Нумерацию разрядов в ячейке. принято вести справа налево, самый левый разряд имеет порядковый номер 0.
Если при записи чисел в ЭВМ мы хотим использовать обычную десятичную систему счисления, то мы должны двоичное кодирование информации уметь получать 10 устойчивых состояний для каждого разряда (как на счетах при помощи костяшек). Такие машины существуют. Однако конструкция элементов такой машины оказывается чрезвычайно сложной, что сказывается на надежности и скорости работы ЭВМ. Наиболее надежным и дешевым является устройство, каждый разряд которого может принимать два состояния: намагничено — не намагничено, высокое напряжение — низкое напряжение и т.д. В современной электронике развитие аппаратной базы ЭВМ идет именно в этом направлении.
Следовательно, использование двоичной системы счисления в качестве внутренней системы представления информации вызвано конструктивными особенностями элементов вычислительных машин.
Двоичное кодирование текстовой информации.
Различные кодировки кириллицею. Начиная с конца 60-х годов компьютеры все больше стали использоваться для обработки текстовой информации, и в настоящее время основная доля персональных компьютеров в мире (и большая часть времени) занята обработкой именно текстовой информации. Традиционно для кодирования одного символа используется количество информации, равное 1 байту, т. е. / = 1 байт = 8 бит. Если рассматривать символы как возможные события, то можно вычислить, какое количество различных символов можно закодировать: N-21— 28-256 . Такое количество символов вполне достаточно для представления текстовой информации, включая прописные и заглавные буквы русского и латинского алфавита, цифры, знаки, графические символы и т. д. Кодирование заключается в том, что каждому символу ставится в соответствие уникальный десятичный код от 0 до 255 или соответствующий ему двоичный код от 00000000 до 11111111. Таким образом, человек различает символы по их начертанию, а компьютер — по их коду. При вводе в компьютер текстовой информации происходит ее двоичное кодирование, изображение символа преобразуется в его двоичный код. Пользователь нажимает на клавиатуре клавишу с символом — и в компьютер поступает определенная последовательность из восьми электрических импульсов (двоичный код символа). Код символа хранится в оперативной памяти компьютера, где занимает одну ячейку. В процессе вывода символа на экран компьютера производится обратный процесс — декодирование, т. е. преобразование кода символа в его изображение. Важно, что присвоение символу конкретного кода — это вопрос соглашения, которое фиксируется в кодовой таблице. Первые 33 кода (с 0 по 32) обозначают не символы, а операции (перевод строки, ввод пробела и т. д.). Коды с 33 по 127 — интернациональные и соответствуют символам латинского алфавита, цифрам, знакам арифметических операций и знакам препинания. Коды с 128 по 255 являются национальными, т. е. в национальных кодировках одному и тому же коду отвечают различные символы. К сожалению, в настоящее время существует пять различных кодовых таблиц для русских букв (КОИ-8, СР1251, СР866, Мае, ISO), поэтому тексты, созданные в одной кодировке, не будут правильно отображаться в другой. Каждая кодировка задается своей собственной кодовой таблицей. Одному и тому же двоичному коду в различных кодировках поставлены в соответствие различные символы. В последнее время появился новый международный стандарт Unicode, который отводит на каждый символ не один байт, а два, и потому с его помощью можно закодировать не 256 символов, а N-216— 65 536 различных символов.
Самые первые компьютеры работали только с числами – это числовая информация.
Потом люди научились «превращать» или кодировать буквы в числа, и тогда компьютер стал работать с числами, словами ,предложениями и большими текстами.
Такую информацию называют числовой.
Конспект урока по информатике в 10 классе на тему «Двоичное кодирование текстовой информации»
Конспект урока по информатике в 10 классе.
Тема урока: «Двоичное кодирование текстовой информации».
Цель урока: ознакомить учащихся с двоичным кодированием текстовой информации.
Задачи урока:
формировать знания учащихся по теме “кодирование текстовой информации”;
развивать навыки анализа и самоанализа;
формировать умения планировать и оценивать свою деятельность.
Вводное слово учителя.
Познавая окружающий мир, человек постоянно имеет дело с информацией, она нужна для того, чтобы, правильно оценив происходящие события найти наиболее удачный вариант своих действий. Информация – это то, чем каждый из нас пополняет собственный багаж знаний. Хорошо известна знаменитая фраза Ротшильдов и повторенная позже Уинстоном Черчилем «Кто владеет информацией, тот владеет миром». Ведь кто владеет наибольшим объемом информации по какому-либо вопросу, тот всегда находится в более выигрышном положении по сравнению с остальными.
В ХХ веке, в связи со стремительным развитием НТП, человеческий мозг оказался не способен быстро и качественно выполнять сложные математические расчеты и действия. Были созданы технические устройства, для обработки, хранения и передачи информации. Но человек способен передавать информацию в различных формах: письменной, устной, в виде жестов, используя при этом различные языки, а компьютер только в цифровой форме. Поэтому существуют устройства ввода и вывода информации, а техническое устройство ее кодирует при вводе – переводит в язык цифр и декодирует при выводе — переводит из языка цифр в понятный нам.
? А какие виды информации вам известны? (Числовая, текстовая, звуковая и графическая).
? С кодированием какой информации мы ознакомились с вами на предыдущих уроках? (С кодированием числовой информации).
? В какой системе счисление человек обрабатывает числовую информацию? (В десятичной).
? В какой системе счисления происходит кодирование информации в компьютере? (В двоичной системе).
? Для хранения и обработки каких чисел используется формат с фиксированной запятой? (Для обработки и хранения целых чисел).
? Для хранения и обработки каких чисел используется формат с плавающей запятой? (Для обработки и хранения дробных и больших чисел).
? Какой код используется для представления положительного числа, а какой для отрицательного? (Прямой для положительного, дополнительный – для отрицательного).
Задание 1.
Вам необходимо записать число -87 в обратном и дополнительном коде.
Что необходимо для этого выполнить.
Модуль числа записать в прямом коде в двоичных разрядах.
Получить обратный код числа, для этого значения всех битов инвертируется (все единицы заменяются на нули, все нули на единицы).
К полученному обратному коду прибавить единицу.
Проверьте правильно ли вы выполнили перевод. (На обратной стороне доски записан перевод).
Первые ЭВМ были созданы для обработки цифровой информации. А для обработки какой информации их используем мы с вами? Чаще для текстовой. Цель нашего урока и будет заключаться в том, чтобы ознакомиться как происходит кодирование текстовой информации.
Откройте тетради и запишите тему урока: «Двоичное кодирование текстовой информации».
Человечество часто использует кодировку (шифрование) текста – тайнопись -криптография, телеграфный код — Азбука Морзе, сурдожесты, дорожные знаки, штрих-код товара.
Один из самых первых известных методов шифрования носит имя римского императора Юлия Цезаря (I век до н.э.). Этот метод основан на замене каждой буквы шифруемого текста, на другую, путем смещения в алфавите от исходной буквы на фиксированное количество символов, причем алфавит читается по кругу, то есть после буквы я рассматривается а. Так слово байт при смещении на два символа вправо кодируется словом гвлф.
Расшифруйте фразу персидского поэта Джалаледдина Руми “кгнусм ёогкг фесл тцфхя фзужщз фхгрзх ёогксп”, закодированную с помощью шифра Цезаря. Известно, что каждая буква исходного текста заменяется третьей после нее буквой. В качестве опоры используйте буквы русского алфавита, расположенные на слайде.
Что у вас получилось?
Закрой глаза свои пусть сердце станет глазом.
Для кодирования как цифровой, так и текстовой информации в компьютере применяется двоичное кодирование, т.е. представление текста в виде последовательности 0 и 1.
Для кодирования одного символа используется количество информации, равное 1 байту.
? Чему равен 1 байт? 1 байт — 8бит.
Если рассматривать символы как возможные события, то по формуле Шенона можно вычислить какое количество символов можно закодировать.
N=2I=28=256
256 символов -такое количество символов вполне достаточно для представления текстовой информации, включая прописные и строчные буквы русского и латинского алфавита, а также цифры и другие символы?
Пожалуйста посчитайте количество возможных символов которые мы используем в письме при чтении, печатание.
33 строчные буквы русского алфавита (а) + 33 прописные буквы (А) = 66;
— для английского алфавита 26 + 26 = 52;
— цифры от 0 до 9 и т.д.
Получается, что нужно 128 символов. Остается еще 128 значений, которые можно использовать для обозначения знаков препинания, арифметических знаков, служебных операций (перевод строки, пробел и т.д.). Следовательно, одного байта вполне хватает, чтобы закодировать необходимые символы для кодирования текстовой информации.
Кодирование заключается в том, что каждому символу ставится в соответствии уникальный десятичный код от 0 до 255 или соответствующий ему двоичный код от 00000000 до 11111111. Таким образом человек различает символы по их начертаниям, а компьютер по их кодам. При вводе в компьютер текста происходит его кодирование, он преобразуется в двоичный код. Пользователь нажимает на клавишу с символом, и в компьютер поступает определенная последовательность из восьми электрических импульсов (двоичный код символа). Код символа хранится в оперативной памяти, где занимает 1 байт. В процессе вывода на экран компьютера происходит обратный процесс – декодирование, то есть преобразование кода символа в его изображение.
Каждая кодировка задается своей собственной кодовой таблицей.
В учебнике на странице 109 представлен фрагмент такой таблицы с различными кодировками. Из таблицы видно , что одному и томуже двоичному коду в различных кодировках поставлены в соответствие различные символы. Например, последовательность числовых кодов 221, 194, 204 в кодировке CP1251 «Code «>КОИ8 «Код обмена информацией, 8-битный» – бессмысленный набор символов.
Из-за того, что существуют различные кодировки текст, созданный в одной кодировке, не будет правильно отображаться в другой.
В настоящее время получил широкое распространение новый международный стандарт Unicode, который отводит на каждый символ два байта. С его помощью можно закодировать N=2 16=65536 различных символов. Этот код включает в себя все существующие алфавиты мира, а также множество математических, музыкальных, химических символов и многое другое. Эту кодировку поддерживают последние версии платформы Microsoft.
Задание 2
В одной из кодировок Unicode каждый символ кодируется 16 битами. Определите размер следующего предложения в данной кодировке:
«Кто владеет информацией, тот владеет миром».
1) 720 байт
2) 37 бит
3) 592 бит
4) 74 байт
Практическая работа
А сейчас мы переходим к практической работе «Кодирование текстовой информации», цель которой научиться определять числовые коды символов на компьютере, вводить символы с помощью числовых кодов и осуществлять перекодировку русскоязычного текста в текстовом редакторе.
Инструктаж по технике безопасности.
Мы кодировали и декодировали числа, текс, на следующих уроках познакомимся с кодированием звука и графики. А скажите, можно ли закодировать эмоции? В виде чего? Да, мы кодируем эмоции в виде смайликов и вставляем их в наши сообщения. Кстати у смайлика есть День рождения. 19 сентября 1982 года профессор Университета Карнеги-Меллона Скотт Фалман впервые предложил использовать три символа, идущие подряд — двоеточие, дефис и закрывающую скобку, этот новый символ был назван «смайликом», т.к. в переводе с английского smile означает «улыбка». Его появление позволило людям лучше передавать свои эмоции в компьютерной переписке и обогатило электронный лексикон.
Чтобы оценить наше сотрудничество, я предлагаю вам закодировать свое настроение на уроке, и поставить в конце практической работы подходящий смайлик.
Оценки за урок.
Домашнее задание. Используя таблицу кодирования символов КОИ8, записать последовательность десятичных числовых кодов для вашей фамилии, имени и отчества.
А независимо от того, что вы смайлик поставили за урок я говорю вам — спасибо за сотрудничество.
Список литературы.
Угринович Н.Д. «Информатика и информационные технологии. Учебник для 10-11 классов / Н.Д. Угринович.- М.: Лаборатория Базовых знаний, 2002. – 512с.: ил.
Кодирование информации. — Информатика — Рефераты и доклады — Каталог статей
Передача и кодирование информацииПлан
1. Передача информации. Информационные каналы
2. Характеристики информационного канала
3. Абстрактный алфавит
4. Кодирование и декодирование
5. Понятие о теоремах Шеннона
6. Международные системы байтового кодирования
7. Кодирование информации
7.1. Двоичное кодирование текстовой информации
7.2. Кодирование графической информации
7.2.1. Кодирование растровых изображений
7.2.2. Кодирование векторных изображений.
7.3. Двоичное кодирование звука
1. Передача информации. Информационные каналы
Информация передается в виде сообщений от некоторого источника информации к ее приемнику посредством канала связи между ними. Источник посылает передаваемое сообщение, которое кодируется в передаваемый сигнал. Этот сигнал посылается по каналу связи. В результате в приемнике появляется принимаемый сигнал, который декодируется и становится принимаемым сообщением. Передача информации по каналам связи часто сопровождается воздействием помех, вызывающих искажение и потерю информации.
Любое событие или явление может быть выражено по-разному, разными способами, разным алфавитом. Чтобы информацию более точно и экономно передать по каналам связи, ее надо соответственно закодировать.
Информация не может существовать без материального носителя, без передачи энергии. Закодированное сообщение приобретает вид сигналов-носителей информации, которые идут по каналу. Выйдя на приемник, сигналы должны обрести вновь общепонятный вид с помощью декодирующего устройства.
Совокупность устройств, предметов или объектов, предназначенных для передачи информации от одного из них, именуемого источником, к другому, именуемому приемником, называется каналом информации, или информационным каналом.
Примером канала может служить почта. Информация, закодированная в виде текста, помещается в конверт, поступает в почтовый ящик, извлекается оттуда и перевозится в почтовое отделение, где сортируется (вручную или машиной). Далее информация перемещается с помощью поезда (самолета, теплохода и т.п.) в почтовое отделение пункта назначения, сортируется и доставляется адресату. Таким образом, почтовый канал включает в себя: конверт (предмет), транспорт и сортировочные машины (устройства), почтовых работников (объекты). Информация, помещенная в этот канал, остается неизменной.
Другим примером может служить телефон. При телефонной передаче источник сообщения – говорящий. Кодирующее устройство, изменяющее звуки слов в электрические импульсы, – микрофон. Канал, по которому передается информация, – телефонный провод. Часть трубки, которую мы подносим к уху, выполняет роль декодирующего устройства (электрические сигналы снова преобразуются в звуки). Информация поступает в «принимающее устройство” – ухо человека на другом конце провода. Канал включает в себя телефонные аппараты (устройства), провода (предметы) и аппаратуру АТС (устройства). Особенностью этого информационного канала является то обстоятельство, что при поступлении в него информация, представленная в виде звуковых волн, преобразуется в электрические колебания и затем передается. Такой канал называется каналом с преобразованием информации.
Еще один пример – компьютер. Отдельные его системы передают одна другой информацию с помощью сигналов. Компьютер – устройство для обработки информации (как станок – устройство для обработки металла), он не создает из «ничего” информацию, а преобразует то, что в него введено. Компьютер является информационным каналом с преобразованием информации: информация поступает с внешних устройств (клавиатура, диск, микрофон), преобразуется во внутренний код и обрабатывается, преобразуется в вид, пригодный для восприятия внешним выходным устройством (монитором, печатающим устройством, динамиками и др.), и передается на них.
Живой нерв канал связи совершенно другой природы. Здесь все сообщения передаются нервным импульсом. Но в технических каналах связи направление передачи информации может меняться, а по нервной системе передача идет в одном направлении.
2. Характеристики информационного канала
Информационные каналы различаются по своей пропускной способности.
Пропускная способность – это количество информации, передаваемое каналом в единицу времени. Измеряется пропускная способность в бит/с. В честь изобретателя телеграфа этой единице было дано имя Бод:
1 Бод = 1 бит/с.
Пропускная способность информационного канала определяется двумя параметрами: разрядностью и частотой. Она пропорциональна их произведению.
Разрядностью называют максимальное количество информации, которое может быть одновременно помещено в канал.
Частота показывает, сколько раз информация может быть помещена в канал в течение единицы времени.
Разрядность почтового канала огромна. Так, пересылая по почте, например, лазерный диск, можно поместить одновременно в канал более 600 Мб информации. В то же время частота почтового канала очень низкая – выемка почты из ящиков происходит не чаще пяти раз в сутки.
Телефонный канал информации однобитный: одновременно по телефонному проводу можно послать или единицу (ток, импульс), или ноль. Частота этого канала может достигать десятки и сотни тысяч циклов в секунду. Это свойство телефонной сети позволяет использовать ее для связи между компьютерами.
3. Абстрактный алфавит
Информация передается в виде сообщений. Дискретная информация записывается с помощью некоторого конечного набора знаков, которые будем называть буквами, не вкладывая в это слово привычного ограниченного значения (типа «русские буквы” или «латинские буквы”). Буква в данном расширенном понимании – любой из знаков, которые некоторым соглашением установлены для общения. Например, при привычной передаче сообщений на русском языке такими знаками будут русские буквы – прописные и строчные, знаки препинания, пробел; если в тексте есть числа – то и цифры. Вообще, буквой будем называть элемент некоторого конечного множества (набора) отличных друг от друга знаков. Множество знаков, в котором определен их порядок, назовем алфавитом (общеизвестен порядок знаков в русском алфавите: А, Б,…, Я).
Рассмотрим некоторые примеры алфавитов.
1, Алфавит прописных русских букв:
А Б В Г Д Е Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
2. Алфавит Морзе:
3. Алфавит клавиатурных символов ПЭВМ IBM (русифицированная клавиатура):
4. Алфавит знаков правильной шестигранной игральной кости:
5. Алфавит арабских цифр:
0123456789
6. Алфавит шестнадцатиричных цифр:
0 1 2 3 4 5 6 7 8 9 A B C D E F
Этот пример, в частности, показывает, что знаки одного алфавита могут образовываться из знаков других алфавитов.
7. Алфавит двоичных цифр:
0 1
Алфавит 7 является одним из примеров, так называемых, «двоичных” алфавитов, т.е. алфавитов, состоящих из двух знаков. Другими примерами являются двоичные алфавиты 8 и 9:
8. Двоичный алфавит «точка, «тире”:. _
9. Двоичный алфавит «плюс”, «минус”: + —
10. Алфавит прописных латинских букв:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
11. Алфавит римской системы счисления:
I V Х L С D М
12. Алфавит языка блок-схем изображения алгоритмов:
4. Кодирование и декодирование
В канале связи сообщение, составленное из символов (букв) одного алфавита, может преобразовываться в сообщение из символов (букв) другого алфавита. Правило, описывающее однозначное соответствие букв алфавитов при таком преобразовании, называют кодом. Саму процедуру преобразования сообщения называют перекодировкой. Подобное преобразование сообщения может осуществляться в момент поступления сообщения от источника в канал связи (кодирование) и в момент приема сообщения получателем (декодирование). Устройства, обеспечивающие кодирование и декодирование, будем называть соответственно кодировщиком и декодировщиком. На рис. 3 приведена схема, иллюстрирующая процесс передачи сообщения в случае перекодировки, а также воздействия помех (см. следующий пункт).
Рис. 3. Процесс передачи сообщения от источника к приемнику
Рассмотрим некоторые примеры кодов.
1. Азбука Морзе в русском варианте (алфавиту, составленному из алфавита русских заглавных букв и алфавита арабских цифр ставится в соответствие алфавит Морзе):
2. Код Трисиме (знакам латинского алфавита ставятся в соответствие комбинации из трех знаков: 1,2,3):
А
111
H
132
O
223
V
321
В
112
I
133
P
231
W
322
С
113
J
211
Q
232
X
323
В
121
K
212
R
233
Y
331
D
122
L
213
S
311
Z
332
F
123
M
221
T
312
.
333
G
131
N
222
U
313
Код Трисиме является примером, так называемого, равномерного кода (такого, в котором все кодовые комбинации содержат одинаковое число знаков – в данном случае три). Пример неравномерного кода – азбука Морзе.
3. Кодирование чисел знаками различных систем счисления см. лекцию 3.
5. Понятие о теоремах Шеннона
Теоремы Шеннона затрагивают проблему эффективного кодирования Первая теорема декларирует возможность создания системы эффективного кодирования дискретных сообщений, у которой среднее число двоичных символов на один символ сообщения асимптотически стремится к энтропии источника сообщений (в отсутствии помех). Вторая теорема Шеннона гласит, что при наличии помех в канале всегда можно найти такую систему кодирования, при которой сообщения будут переданы с заданной достоверностью.
Подробнее>>
6. Международные системы байтового кодирования
Информатика и ее приложения интернациональны. Это связано как с объективными потребностями человечества в единых правилах и законах хранения, передачи и обработки информации, так и с тем, что в этой сфере деятельности (особенно в ее прикладной части) заметен приоритет одной страны, которая благодаря этому получает возможность «диктовать моду”.
Компьютер считают универсальным преобразователем информации. Тексты на естественных языках и числа, математические и специальные символы – одним словом все, что в быту или в профессиональной деятельности может быть необходимо человеку, должно иметь возможность быть введенным в компьютер.
В силу безусловного приоритета двоичной системы счисления при внутреннем представлении информации в компьютере кодирование «внешних” символов основывается на сопоставлении каждому из них определенной группы двоичных знаков. При этом из технических соображений и из соображений удобства кодирования-декодирования следует пользоваться равномерными кодами, т.е. двоичными группами равной длины.
Попробуем подсчитать наиболее короткую длину такой комбинации с точки зрения человека, заинтересованного в использовании лишь одного естественного алфавита – скажем, английского: 26 букв следует умножить на 2 (прописные и строчные) – итого 52; 10 цифр, будем считать, 10 знаков препинания; 10 разделительных знаков (три вида скобок, пробел и др.), знаки привычных математических действий, несколько специальных символов (типа #, $, & и др.) – итого ~ 100. Точный подсчет здесь не нужен, поскольку нам предстоит решить простейшую задачу: имея, скажем, равномерный код из групп по N двоичных знаков, сколько можно образовать разных кодовых комбинаций. Ответ очевиден К = 2N. Итак, при N = 6 К = 64 – явно мало, при N = 7 К = 128 – вполне достаточно.
Однако, для кодирования нескольких (хотя бы двух) естественных алфавитов (плюс все отмеченные выше знаки) и этого недостаточно. Минимально достаточное значение N в этом случае 8; имея 256 комбинаций двоичных символов, вполне можно решить указанную задачу. Поскольку 8 двоичных символов составляют 1 байт, то говорят о системах «байтового” кодирования.
Наиболее распространены две такие системы: EBCDIC (Extended Binary Coded Decimal Interchange Code) и ASCII (American Standard Information Interchange).
Первая – исторически тяготеет к «большим” машинам, вторая чаще используется на мини- и микро-ЭВМ (включая персональные компьютеры). Ознакомимся подробнее именно с ASCII, созданной в 1963 г.
В своей первоначальной версии это – система семибитного кодирования. Она ограничивалась одним естественным алфавитом (английским), цифрами и набором различных символов, включая «символы пишущей машинки” (привычные знаки препинания, знаки математических действий и др.) и «управляющие символы”. Примеры последних легко найти на клавиатуре компьютера: для микро-ЭВМ, например, DEL – знак удаления символа.
В следующей версии фирма IBM перешла на расширенную 8-битную кодировку. В ней первые 128 символов совпадают с исходными и имеют коды со старшим битом равным нулю, а остальные коды отданы под буквы некоторых европейских языков, в основе которых лежит латиница, греческие буквы, математические символы (скажем, знак квадратного корня) и символы псевдографики. С помощью последних можно создавать таблицы, несложные схемы и др.
Для представления букв русского языка (кириллицы) в рамках ASCII было предложено несколько версий. Первоначально был разработан ГОСТ под названием КОИ-7, оказавшийся по ряду причин крайне неудачным; ныне он практически не используется.
В табл. 2 приведена часто используемая в нашей стране модифицированная альтернативная кодировка. В левую часть входят исходные коды ASCII; в правую часть (расширение ASCII) вставлены буквы кириллицы взамен букв, немецкого, французского алфавитов (не совпадающих по написанию с английскими), греческих букв, некоторых спецсимволов.
Знакам алфавита ПЭВМ ставятся в соответствие шестнадцатиричные числа по правилу: первая – номер столбца, вторая – номер строки. Например: английская ‘А’ – код 41, русская ‘и’ – код А8.
Таблица 2. Таблица кодов ASCII (расширенная)
Одним из достоинств этой системы кодировки русских букв является их естественное упорядочение, т.е. номера букв следуют друг за другом в том же порядке, в каком сами буквы стоят в русском алфавите. Это очень существенно при решении ряда задач обработки текстов, когда требуется выполнить или использовать лексикографическое упорядочение слов.
Из сказанного выше следует, что даже 8-битная кодировка недостаточна для кодирования всех символов, которые хотелось бы иметь в расширенном алфавите. Все препятствия могут быть сняты при переходе на 16-битную кодировку Unicode, допускающую 65536 кодовых комбинаций.
7. Кодирование информации
7.1. Двоичное кодирование текстовой информации
Начиная с 60-х годов, компьютеры все больше стали использовать для обработки текстовой информации и в настоящее время большая часть ПК в мире занято обработкой именно текстовой информации.
Традиционно для кодирования одного символа используется количество информации равное1 байту (1 байт = 8 битов).
Для кодирования одного символа требуется один байт информации.
Учитывая, что каждый бит принимает значение 1 или 0, получаем, что с помощью 1 байта можно закодировать 256 различных символов. (28=256)
Кодирование заключается в том, что каждому символу ставиться в соответствие уникальный двоичный код от 00000000 до 11111111 (или десятичный код от 0 до 255).
Важно, что присвоение символу конкретного кода – это вопрос соглашения, которое фиксируется кодовой таблицей (например, ASCII).
Обратите внимание!
Цифры кодируются по стандарту ASCII в двух случаях – при вводе-выводе и когда они встречаются в тексте. Если цифры участвуют в вычислениях, то осуществляется их преобразование в другой двоичных код.
Возьмем число 57. При использовании в тексте каждая цифра будет представлена своим кодом в соответствии с таблицей ASCII. В двоичной системе это – 00110101 00110111.
При использовании в вычислениях код этого числа будет получен по правилам перевода в двоичную систему и получим – 00111001.
7.2. Кодирование графической информации
Под графической информацией можно понимать рисунок, чертеж, фотографию, картинку в книге, изображения на экране телевизора или в кинозале и т. д. Для обсуждения общих принципов кодирования графической информации в качестве конкретного, достаточно общего случая графического объекта выберем изображение на экране телевизора. Это изображение состоит из некоторого количества горизонтальных линий – строк. А каждая строка в свою очередь состоит из элементарных мельчайших единиц изображения – точек, которые принято называть пикселами (picsel – PICture’S ELement – элемент картинки). Весь массив элементарных единиц изображения называют растром (лат. rastrum – грабли). Степень четкости изображения зависит от количества строк на весь экран и количества точек в строке, которые представляют разрешающую способность экрана или просто разрешение. Чем больше строк и точек, тем четче и лучше изображение. Достаточно хорошим считается разрешение 640×480, то есть 640 точек на строку и 480 строчек на экран.
Строки, из которых состоит изображение, можно просматривать сверху вниз друг за другом, как бы составив из них одну сплошную линию. После полного просмотра первой строки просматривается вторая, за ней третья, потом четвертая и т. д. до последней строки экрана. Так как каждая из строк представляет собой последовательность пикселов, то все изображение, вытянутое в линию, также можно считать линейной последовательностью элементарных точек. В рассматриваемом случае эта последовательность состоит из 640×480=307200 пикселов. Вначале рассмотрим принципы кодирования монохромного изображения, то есть изображения, состоящего из любых двух контрастных цветов – черного и белого, зеленого и белого, коричневого и белого и т. д. Для простоты обсуждения будем считать, что один из цветов – черный, а второй – белый. Тогда каждый пиксел изображения может иметь либо черный, либо белый цвет. Поставив в соответствие черному цвету двоичный код «0”, а белому – код «1” (либо наоборот), мы сможем закодировать в одном бите состояние одного пикселя монохромного изображения. А так как байт состоит из 8 бит, то на строчку, состоящую из 640 точек, потребуется 80 байтов памяти, а на все изображение – 38 400 байтов.
Однако полученное таким образом изображение будет чрезмерно контрастным. Реальное черно-белое изображение состоит не только из белого и черного цветов. В него входят множество различных промежуточных оттенков – серый, светло-серый, темно-серый и т. д. Если кроме белого и черного цветов использовать только две дополнительные градации, скажем светло-серый и темно-серый, то для того чтобы закодировать цветовое состояние одного пикселя, потребуется уже два бита. При этом кодировка может быть, например, такой: черный цвет – 002, темно-серый – 012, светло-серый – 102, белый – 112.
Общепринятым на сегодняшний день, дающим достаточно реалистичные монохромные изображения, считается кодирование состояния одного пикселя с помощью одного байта, которое позволяет передавать 256 различных оттенков серого цвета от полностью белого до полностью черного. В этом случае для передачи всего растра из 640×480 пикселов потребуется уже не 38 400, а все 307 200 байтов.
Цветное изображение может формироваться различными способами. Один из них – метод RGB (от слов Red, Green, Blue – красный, зеленый, синий), который опирается на то, что глаз человека воспринимает все цвета как сумму трех основных цветов – красного, зеленого и синего. Например, сиреневый цвет – это сумма красного и синего, желтый цвет – сумма красного и зеленого и т. д. Для получения цветного пикселя в одно и то же место экрана направляется не один, а сразу три цветных луча. Опять упрощая ситуацию, будем считать, что для кодирования каждого из цветов достаточно одного бита. Нуль в бите будет означать, что в суммарном цвете данный основной отсутствует, а единица – присутствует. Следовательно, для кодирования одного цветного пиксела потребуется 3 бита – по одному на каждый цвет. Пусть первый бит соответствует красному цвету, второй – зеленому и третий – синему. Тогда код 101(2) обозначает сиреневый цвет – красный есть, зеленого нет, синий есть, а код 110(2) – желтый цвет – красный есть, зеленый есть, синего нет. При такой схеме кодирования каждый пиксел может иметь один из восьми возможных цветов. Если же каждый из цветов кодировать с помощью одного байта, как это принято для реалистического монохромного изображения, то появится возможность передавать по 256 оттенков каждого из основных цветов. А всего в этом случае обеспечивается передача 256x256x256=16 777 216 различных цветов, что достаточно близко к реальной чувствительности человеческого глаза. Таким образом, при данной схеме кодирования цвета на изображение одного пикселя требуется 3 байта, или 24 бита, памяти. Этот способ представления цветной графики принято называть режимом True Color (true color – истинный цвет) или полноцветным режимом.
Следует упомянуть еще один часто используемый метод представления цвета, в котором вместо основного цвета используется его дополнение до белого. Если три цвета: красный, зеленый и синий вместе дают белый, то дополнением для красного, очевидно, является сочетание зеленого и синего, то есть голубой цвет. Аналогичным образом дополнением для зеленого является сочетание красного и синего, то есть пурпурный, а для синего – сочетание красного и зеленого, то есть желтый цвет. Эти три цвета – голубой, пурпурный и желтый с добавлением черного образуют основные цвета в системе кодирования, которая называется CMYK (от Cyan – голубой, Magenta – пурпурный, Yellow – желтый и blacK – черный). Этот режим также относится к полноцветным, но для передачи состояния одного пикселя в этом случае требуется 32 бита, или четыре байта, памяти, и может быть передано 4 294 967 295 различных цветов.
Полноцветные режимы требуют очень много памяти. Так, для обсуждавшегося выше растра 640×480 при использовании метода RGB требуется 921 600, а для режима CMYK – 1 228 800 байтов памяти. В целях экономии памяти разрабатываются различные режимы и графические форматы, которые немного хуже передают цвет, но требуют гораздо меньше памяти. В частности, можно упомянуть режим High Color (high color – богатый цвет), в котором для передачи цвета одного пикселя используется 16 битов и, следовательно, можно передать 65 535 цветовых оттенков, а также индексный режим, который базируется на заранее созданной таблице цветовых оттенков. Нужный цвет выбирается из этой таблицы с помощью номера – индекса, который занимает всего один байт памяти.
При записи изображения в память компьютера кроме цвета отдельных точек необходимо фиксировать много дополнительной информации – размеры рисунка, яркость точек и т. д. Конкретный способ кодирования всей требуемой при записи изображения информации образует графический формат. Форматы кодирования графической информации, основанные на передаче цвета каждого отдельного пикселя, из которого состоит изображение, относят к группе растровых или BitMap форматов (bit map – битовая карта).
7.2.1. Кодирование растровых изображений
Растровое изображение представляет собой совокупность точек (пикселей) разных цветов.
Наиболее известными растровыми форматами являются BMP, GIF и JPEG форматы. В формате BMP (от BitMaP) задается цветность всех пикселов изображения. При этом можно выбрать монохромный режим с 256 градациями или цветной с 16 256 или 16 777 216 цветами. Этот формат требует много памяти. В формате GIF (Graphics Interchange Format – графический формат обмена) используются специальные методы сжатия кода, причем поддерживается только 256 цветов. Качество изображения немного хуже, чем в формате BMP, зато код занимает в десятки раз меньше памяти. Формат JPEG (Goint Photographic Experts Group -Уединенная группа экспертов по фотографии) использует методы сжатия, приводящие к потерям некоторых деталей. Однако поддержка 16 777 216 цветов все-таки обеспечивает высокое качество изображения. По требованиям к памяти формат JPEG занимает промежуточное положение между форматами BMP и GIF.
7.2.2. Кодирование векторных изображений.
Векторное изображение представляет собой совокупность графических примитивов (точка, отрезок, эллипс…). Каждый примитив описывается математическими формулами. Кодирование зависти от прикладной среды.
Растровая графика обладает существенным недостатком – изображение, закодированное в одном из растровых форматов, очень плохо «переносит” увеличение или уменьшение его размеров – масштабирование. Для решения задач, в которых приходится часто выполнять эту операцию, были разработаны методы так называемой векторной графики. В векторной графике, в отличие от основанной на точке – пикселе – растровой графики, базовым объектом является линия. При этом изображение формируется из описываемых математическим, векторным способом отдельных отрезков прямых или кривых линий, а также геометрических фигур – прямоугольников, окружностей и т. д., которые могут быть из них получены. Фирма Adobe разработала специальный язык PostScript (от poster script – сценарий плакатов, объявлений, афиш), служащий для описания изображений на базе указанных методов. Этот язык является основой для нескольких векторных графических форматов. В частности, можно указать форматы PS (PostScript) и EPS, которые используются для описания как векторных, так и растровых изображений, а также разнообразных текстовых шрифтов. Изображения и тексты, записанные в этих форматах, большинством популярных программ не воспринимаются, они могут просматриваться и печататься только с помощью специализированных аппаратных и программных средств.
Кроме растровой и векторной графики существует еще и фрактальная графика, в которой формирование изображений целиком основано на математических формулах, уравнениях, описывающих те или иные фигуры, поверхности, тела. При этом само изображение в памяти компьютера фактически не хранится – оно получается как результат обработки некоторых данных. Таким способом могут быть получены даже довольно реалистичные изображения природных ландшафтов.
7.3. Двоичное кодирование звука
Развитие способов кодирования звуковой информации, а также движущихся изображений – анимации и видеозаписей – происходило с запаздыванием относительно рассмотренных выше разновидностей информации. Заметим, что под анимацией понимается похожее на мультипликацию «оживление” изображений, но выполняемое с помощь средств компьютерной графики. Анимация представляет собой последовательность незначительно отличающихся друг от друга, полученных с помощью компьютера картинок, которые фиксируют близкие по времени состояния движения какого-либо объекта или группы объектов. Приемлемые способы хранения и воспроизведения с помощью компьютера звуковых и видеозаписей появились только в девяностых годах двадцатого века. Эти способы работы со звуком и видео получили название мультимедийных технологий. Звук представляет собой достаточно сложное непрерывное колебание воздуха. Оказывается, что такие непрерывные сигналы можно с достаточной точностью представлять в виде суммы некоторого числа простейших синусоидальных колебаний. Причем каждое слагаемое, то есть каждая синусоида, может быть точно задана некоторым набором числовых параметров – амплитуды, фазы и частоты, которые можно рассматривать как код звука в некоторый момент времени. Такой подход к записи звука называется преобразованием в цифровую форму, оцифровыванием или дискретизацией, так как непрерывный звуковой сигнал заменяется дискретным (то есть состоящим из раздельных элементов) набором значений сигнала в некоторые моменты времени. Количество отсчетов сигнала в единицу времени называется частотой дискретизации. В настоящее время при записи звука в мультимедийных технологиях применяются частоты 8, 11, 22 и 44 кГц. Так, частота дискретизации 44 килогерца означает, что одна секунда непрерывного звучания заменяется набором из сорока четырех тысяч отдельных отсчетов сигнала. Чем выше частота дискретизации, тем лучше качество оцифрованного звука.
Как отмечалось выше, каждый отдельный отсчет можно описать некоторой совокупностью чисел, которые затем можно представить в виде некоторого двоичного кода. Качество преобразования звука в цифровую форму определяется не только частотой дискретизации, но и количеством битов памяти, отводимых на запись кода одного отсчета. Этот параметр принято называть разрядностью преобразования. В настоящее время обычно используется разрядность 8,16 и 24 бит. На описанных выше принципах основывается формат WAV (от WAVeform-audio – волновая форма аудио) кодирования звука. Получить запись звука в этом формате можно от подключаемых к компьютеру микрофона, проигрывателя, магнитофона, телевизора и других стандартно используемых устройств работы со звуком. Однако формат WAV требует очень много памяти. Так, при записи стереофонического звука с частотой дискретизации 44 килогерца и разрядностью 16 бит – параметрами, дающими хорошее качество звучания, – на одну минуту записи требуется около десяти миллионов байтов памяти.
Кроме волнового формата WAV, для записи звука широко применяется формат с названием MIDI (Musical Instruments Digital Interface – цифровой интерфейс музыкальных инструментов). Фактически этот формат представляет собой набор инструкций, команд так называемого музыкального синтезатора – устройства, которое имитирует звучание реальных музыкальных инструментов. Команды синтезатора фактически являются указаниями на высоту ноты, длительность ее звучания, тип имитируемого музыкального инструмента и т. д. Таким образом, последовательность команд синтезатора представляет собой нечто вроде нотной записи музыкальной мелодии. Получить запись звука в формате MIDI можно только от специальных электромузыкальных инструментов, которые поддерживают интерфейс MIDI. Формат MIDI обеспечивает высокое качество звука и требует значительно меньше памяти, чем формат WAV.
Кодирование видеоинформации еще более сложная проблема, чем кодирование звуковой информации, так как нужно позаботиться не только о дискретизации непрерывных движений, но и о синхронизации изображения со звуковым сопровождением. В настоящее время для этого используется формат, которой называется AVI (Audio-Video Interleaved – чередующееся аудио и видео). Основные мультимедийные форматы AVI и WAV очень требовательны к памяти. Поэтому на практике применяются различные способы компрессии, то есть сжатия звуковых и видео- кодов. В настоящее время стандартными стали способы сжатия, предложенные MPEG (Moving Pictures Experts Group – группа экспертов по движущимся изображениям). В частности, стандарт MPEG описывает несколько популярных в настоящее время форматов записи звука. Так, например, при записи в формате МР3 при практически том же качестве звука требуется в десять раз меньше памяти, чем при использовании формата WAV. Существуют специальные программы, которые преобразуют записи звука из формата WAV в формат МР3. Совсем недавно был разработан стандарт MPEG-4, применение которого позволяет записать полнометражный цветной фильм со звуковым сопровождением на компакт-диск обычных размеров и качества.
Перед завершением обсуждения общих принципов кодирования информации хотелось бы обратить внимание на один важный момент. Возьмем какой-либо двоичный код, например 1000 1100(2). Если обратиться к приведенному выше фрагменту кодовой таблицы, то можно утверждать, что это код буквы «М”. С другой стороны, можно сказать, что этим кодом задается цвет одного из пикселов монохромного изображения. Наконец, если воспользоваться правилами перевода из двоичной системы в десятичную, то можно утверждать, что это код числа +14010 (в другой интерпретации это код числа –12010). Что же это на самом деле? Интерпретация, то есть истолкование смысла одного и того же машинного кода, может быть самой разной. Один и тот же код разными программами может рассматриваться и как число, и как текст, и как изображение, и как звук. Другими словами, как именно трактуется тот или иной машинный код, определяется обрабатывающей этот код программой.
Код табуляции. Кодирование текстовой информации
Как известно, компьютер хранит информацию в двоичном виде, представляя её в качестве последовательности единиц и нулей. Чтобы перевести информацию в форму, удобную для человеческого восприятия, каждая уникальная последовательность цифр при отображении заменяется на соответствующий ей символ.
Одной из систем соотнесения бинарных кодов с печатными и управляющими символами является
При сегодняшнем уровне развития компьютерных технологий от пользователя не требуется знание кода каждого конкретного символа. Однако общее понимание того, как осуществляется кодирование, является крайне полезным, а для некоторых категорий специалистов и вовсе необходимым.
Создание ASCII
В первоначальном виде кодировка была разработана в 1963 году и затем в течение 25 лет дважды обновлялась.
В исходном варианте таблица символов ASCII включала 128 символов, позже появилась расширенная версия, где первые 128 знаков были сохранены, а кодам с задействованным восьмым битом поставлены в соответствие отсутствовавшие ранее символы.
На протяжении многих лет данная кодировка являлась самой популярной в мире. В 2006 году ведущее место заняла Latin 1252, а с конца 2007 года по настоящее время лидирующую позицию прочно держит Юникод.
Компьютерное представление ASCII
Каждый ASCII-символ имеет собственный код, состоящий из 8 знаков, представляющих собой нуль или единицу. Минимальным числом в таком представлении является нуль (восемь нулей в двоичной системе), который и является кодом первого элемента в таблице.
Два кода в таблице были отведены под переключение между стандартной US-ASCII и её национальным вариантом.
После того как ASCII стала включать не 128, а 256 знаков, распространение получил вариант кодировки, при котором исходная версия таблицы была сохранена в первых 128 кодах с нулевым 8-м битом. Знаки национальной письменности хранились в верхней половине таблицы (128-255-я позиции).
Знать непосредственно коды символов ASCII пользователю не требуется. Разработчику программного обеспечения обычно достаточно знать номер элемента в таблице, чтобы при необходимости рассчитать его код, используя бинарную систему.
Русский язык
После разработки в начале 70-х годов кодировок для скандинавских языков, китайского, корейского, греческого и др., созданием собственного варианта занялся и Советский Союз. Вскоре был разработан вариант 8-битной кодировки под названием КОИ8, сохраняющей первые 128 кодов символов ASCII и выделяющей столько же позиций под буквы национального алфавита и дополнительные знаки.
До внедрения Юникода КОИ8 доминировала в российском сегменте интернета. Существовали варианты кодировки как для русского, так и для украинского алфавита.
Проблемы ASCII
Поскольку количество элементов даже в расширенной таблице не превышало 256, возможность вмещения в одну кодировку нескольких различных письменностей отсутствовала. В 90-е годы в Рунете появилась проблема «крокозябр», когда тексты, набранные русскими символами ASCII, отображались некорректно.
Проблема заключалась в несоответствии кодов различных вариантов ASCII друг другу. Вспомним, что на позициях 128-255 могли располагаться различные знаки, и при смене одной кириллической кодировки на другую все буквы текста заменялись на другие, имеющие идентичный номер в другой версии кодировки.
Текущее состояние
С появлением Юникода популярность ASCII резко пошла на убыль.
Причина этого кроется в том факте, что новая кодировка позволила вместить знаки почти всех письменных языков. При этом первые 128 символов ASCII соответствуют тем же символам в Юникоде.
В 2000-м ASCII была самой популярной кодировкой в интернете и использовалась на 60 % проиндексированных «Гуглом» веб-страниц. Уже к 2012 году доля таких страниц упала до 17 %, а место самой популярной кодировки занял Юникод (UTF-8).
Таким образом, ASCII является важной частью истории информационных технологий, однако её использование в дальнейшем видится малоперспективным.
Для того, чтобы грамотно использовать ASCII , необходимо расширить знания в данной сфере и о возможностях кодирования.
Что это такое?
ASCII представляет собой кодировочную таблицу печатных символов (см. скриншот №1), набираемых на компьютерной клавиатуре, для передачи информации и некоторых кодов. Иными словами происходит кодирование алфавита и десятичных цифр в соответствующие символы, представляющие и несущие в себе необходимую информацию.
Кодировка ASCII была разработана в Америке, поэтому стандартная кодировочная таблица обычно включает в себя английский алфавит с цифрами, что в общей сложности составляет около 128 символов. Но тогда возникает справедливый вопрос: что делать, если необходима кодировка национального алфавита?
Для решения подобных вопросов были разработаны другие версии таблицы ASCII . Например, для языков с иноязычной структурой были или убраны буквы английского алфавита, или к ним добавлялись дополнительные символы в виде национального алфавита. Так, в кодировке ASCII могут присутствовать русские буквы для национального использования (см. скриншот №2).
Где применяется система кодировки ASCII?
Данная кодировочная система необходима не только для набора текстовой информации на клавиатуре. Она также используется в графике. Например, в программе ASCII Art Maker графические изображения различных расширений состоят из спектра символов кодировки ASCII (см. скриншот №3).
Как правило, подобные программы можно разделить на те, что выполняют функцию графических редакторов, инвертируя изображение в текст, и на те, что конвертируют изображение в ASCII -графику. Всем известный смайлик (или как его еще называют «улыбающееся человеческое лицо ») тоже является примером кодировочного символа.
Данный метод кодировки также может быть востребован во время написания или создания документа HTML. Например, вы вводите определённый и необходимый вам набор знаков, а при просмотре самой страницы на экран будет выведен символ, соответствующий данному коду.
Кроме всего прочего данный вид кодировки необходим при создании многоязычного сайта, потому что знаки, которые не входят в ту или иную национальную таблицу, нужно будет заменить ASCII кодами. Если читатель непосредственно связан с информационно-коммуникативными технологиями (ИКТ), то ему будет полезно ознакомиться и с такими системами как:
- Переносимый набор символов;
- Управляющие символы;
- EBCDIC;
- VISCII;
- YUSCII;
- Юникод;
- ASCII art;
- КОИ-8.
Свойства таблицы ASCII
Как и любая систематизированная программа, ASCII обладает своими характерными свойствами. Так, например, десятеричная система исчисления (цифры от 0 до 9) преобразуется в двоичную систему исчисления (т.е. каждая десятеричная цифра преобразуется в двоичную 288=1001000 соответственно).
Буквы, располагающиеся в верхних и нижних колонках, отличаются друг от друга лишь битом, что существенно снижает уровень сложности проверки и редактирование регистра.
При всех этих свойствах кодировка ASCII работает как восьми битная, хотя изначально предусматривалась как семи битная.
Применение ASCII в программах Microsoft Office:
В случае необходимости данный вариант кодирования информации может быть использован в Microsoft Notepad и Microsoft Office Word. В рамках этих приложений документ может быть сохранен в формате ASCII , но в этом случае при наборе текста невозможно будет использование некоторых функций.
В частности, будет недоступно выделение жирным и полужирным шрифтом, потому что кодирование сохраняет лишь смысл набранной информации, а не общий вид и форму. Добавить такие коды в документ вы можете с помощью следующих программных приложений:
- Microsoft Excel;
- Microsoft FrontPage;
- Microsoft InfoPath;
- Microsoft OneNote;
- Microsoft Outlook;
- Microsoft PowerPoint;
- Microsoft Project.
При этом стоит учитывать, что набирая код ASCII в этих приложениях необходимо удерживать нажатой клавиатурную клавишу ALT.
Конечно, все необходимые коды требует более длительного и обстоятельного изучения, но это выходит за пределы нашей сегодняшней статьи. Надеюсь, что она оказалась для Вас действительно полезной.
До новых встреч!
Хорошо Плохо
Юникод (по-английски Unicode) — это стандарт кодирования символов. Проще говоря, это таблица соответствия текстовых знаков ( , букв, элементов пунктуации ) двоичным кодам. Компьютер понимает только последовательность нулей и единиц. Чтобы он знал, что именно должен отобразить на экране, необходимо присвоить каждому символу свой уникальный номер. В восьмидесятых, знаки кодировали одним байтом, то есть восемью битами (каждый бит это 0 или 1). Таким образом получалось, что одна таблица (она же кодировка или набор) может вместить только 256 знаков. Этого может не хватить даже для одного языка. Поэтому, появилось много разных кодировок, путаница с которыми часто приводила к тому, что на экране вместо читаемого текста появлялись какие-то странные кракозябры. Требовался единый стандарт, которым и стал Юникод. Самая используемая кодировка — UTF-8 (Unicode Transformation Format) для изображения символа задействует от 1 до 4 байт.
Символы
Символы в таблицах Юникода пронумерованы шестнадцатеричными числами. Например, кириллическая заглавная буква М обозначена U+041C. Это значит, что она стоит на пересечении строки 041 и столбца С. Её можно просто скопировать и потом вставить куда-либо. Чтобы не рыться в многокилометровом списке следует воспользоваться поиском. Зайдя на страницу символа, вы увидите его номер в Юникоде и способ начертания в разных шрифтах. В строку поиска можно вбить и сам знак, даже если вместо него отрисовывается квадратик, хотя бы для того, чтобы узнать, что это было. Ещё, на этом сайте есть специальные (и — случайные) наборы однотипных значков, собранные из разных разделов, для удобства их использования.
Стандарт Юникод — международный. Он включает знаки почти всех письменностей мира. В том числе и тех, которые уже не применяются. Египетские иероглифы, германские руны, письменность майя, клинопись и алфавиты древних государств. Представлены и обозначения мер и весов, нотных грамот, математических понятий.
Сам консорциум Юникода не изобретает новых символов. В таблицы добавляются те значки, которые находят своё применение в обществе. Например, знак рубля активно использовался в течении шести лет прежде чем был добавлен в Юникод. Пиктограммы эмодзи (смайлики) тоже сначала получили широкое применение в Япониии прежде чем были включены в кодировку. А вот товарные знаки, и логотипы компаний не добавляются принципиально. Даже такие распространённые как яблоко Apple или флаг Windows. На сегодняшний день, в версии 8.0 закодировано около 120 тысяч символов.
Dec | Hex | Символ | Dec | Hex | Символ | |
000 | 00 | спец. NOP | 128 | 80 | Ђ | |
001 | 01 | спец. SOH | 129 | 81 | Ѓ | |
002 | 02 | спец. STX | 130 | 82 | ‚ | |
003 | 03 | спец. ETX | 131 | 83 | ѓ | |
004 | 04 | спец. EOT | 132 | 84 | „ | |
005 | 05 | спец. ENQ | 133 | 85 | … | |
006 | 06 | спец. ACK | 134 | 86 | † | |
007 | 07 | спец. BEL | 135 | 87 | ‡ | |
008 | 08 | спец. BS | 136 | 88 | € | |
009 | 09 | спец. TAB | 137 | 89 | ‰ | |
010 | 0A | спец. LF | 138 | 8A | Љ | |
011 | 0B | спец. VT | 139 | 8B | ‹ ‹ | |
012 | 0C | спец. FF | 140 | 8C | Њ | |
013 | 0D | спец. CR | 141 | 8D | Ќ | |
014 | 0E | спец. SO | 142 | 8E | Ћ | |
015 | 0F | спец. SI | 143 | 8F | Џ | |
016 | 10 | спец. DLE | 144 | 90 | ђ | |
017 | 11 | спец. DC1 | 145 | 91 | ‘ | |
018 | 12 | спец. DC2 | 146 | 92 | ’ | |
019 | 13 | спец. DC3 | 147 | 93 | “ | |
020 | 14 | спец. DC4 | 148 | 94 | ” | |
021 | 15 | спец. NAK | 149 | 95 | ||
022 | 16 | спец. SYN | 150 | 96 | – | |
023 | 17 | спец. ETB | 151 | 97 | — | |
024 | 18 | спец. CAN | 152 | 98 | ||
025 | 19 | спец. EM | 153 | 99 | ™ | |
026 | 1A | спец. SUB | 154 | 9A | љ | |
027 | 1B | спец. ESC | 155 | 9B | › | |
028 | 1C | спец. FS | 156 | 9C | њ | |
029 | 1D | спец. GS | 157 | 9D | ќ | |
030 | 1E | спец. RS | 158 | 9E | ћ | |
031 | 1F | спец. US | 159 | 9F | џ | |
032 | 20 | сцеп. SP (Пробел) | 160 | A0 | ||
033 | 21 | ! | 161 | A1 | Ў | |
034 | 22 | » | 162 | A2 | ў | |
035 | 23 | # | 163 | A3 | Ћ | |
036 | 24 | $ | 164 | A4 | ¤ | |
037 | 25 | % | 165 | A5 | Ґ | |
038 | 26 | & | 166 | A6 | ¦ | |
039 | 27 | » | 167 | A7 | § | |
040 | 28 | ( | 168 | A8 | Ё | |
041 | 29 | ) | 169 | A9 | © | |
042 | 2A | * | 170 | AA | Є | |
043 | 2B | + | 171 | AB | « | |
044 | 2C | , | 172 | AC | ¬ | |
045 | 2D | — | 173 | AD | | |
046 | 2E | . | 174 | AE | ® | |
047 | 2F | / | 175 | AF | Ї | |
048 | 30 | 0 | 176 | B0 | ° | |
049 | 31 | 1 | 177 | B1 | ± | |
050 | 32 | 2 | 178 | B2 | І | |
051 | 33 | 3 | 179 | B3 | і | |
052 | 34 | 4 | 180 | B4 | ґ | |
053 | 35 | 5 | 181 | B5 | µ | |
054 | 36 | 6 | 182 | B6 | ¶ | |
055 | 37 | 7 | 183 | B7 | · | |
056 | 38 | 8 | 184 | B8 | ё | |
057 | 39 | 9 | 185 | B9 | № | |
058 | 3A | : | 186 | BA | є | |
059 | 3B | ; | 187 | BB | » | |
060 | 3C | 188 | BC | ј | ||
061 | 3D | = | 189 | BD | Ѕ | |
062 | 3E | > | 190 | BE | ѕ | |
063 | 3F | ? | 191 | BF | ї | |
064 | 40 | @ | 192 | C0 | А | |
065 | 41 | A | 193 | C1 | Б | |
066 | 42 | B | 194 | C2 | В | |
067 | 43 | C | 195 | C3 | Г | |
068 | 44 | D | 196 | C4 | Д | |
069 | 45 | E | 197 | C5 | Е | |
070 | 46 | F | 198 | C6 | Ж | |
071 | 47 | G | 199 | C7 | З | |
072 | 48 | H | 200 | C8 | И | |
073 | 49 | I | 201 | C9 | Й | |
074 | 4A | J | 202 | CA | К | |
075 | 4B | K | 203 | CB | Л | |
076 | 4C | L | 204 | CC | М | |
077 | 4D | M | 205 | CD | Н | |
078 | 4E | N | 206 | CE | О | |
079 | 4F | O | 207 | CF | П | |
080 | 50 | P | 208 | D0 | Р | |
081 | 51 | Q | 209 | D1 | С | |
082 | 52 | R | 210 | D2 | Т | |
083 | 53 | S | 211 | D3 | У | |
084 | 54 | T | 212 | D4 | Ф | |
085 | 55 | U | 213 | D5 | Х | |
086 | 56 | V | 214 | D6 | Ц | |
087 | 57 | W | 215 | D7 | Ч | |
088 | 58 | X | 216 | D8 | Ш | |
089 | 59 | Y | 217 | D9 | Щ | |
090 | 5A | Z | 218 | DA | Ъ | |
091 | 5B | [ | 219 | DB | Ы | |
092 | 5C | \ | 220 | DC | Ь | |
093 | 5D | ] | 221 | DD | Э | |
094 | 5E | ^ | 222 | DE | Ю | |
095 | 5F | _ | 223 | DF | Я | |
096 | 60 | ` | 224 | E0 | а | |
097 | 61 | a | 225 | E1 | б | |
098 | 62 | b | 226 | E2 | в | |
099 | 63 | c | 227 | E3 | г | |
100 | 64 | d | 228 | E4 | д | |
101 | 65 | e | 229 | E5 | е | |
102 | 66 | f | 230 | E6 | ж | |
103 | 67 | g | 231 | E7 | з | |
104 | 68 | h | 232 | E8 | и | |
105 | 69 | i | 233 | E9 | й | |
106 | 6A | j | 234 | EA | к | |
107 | 6B | k | 235 | EB | л | |
108 | 6C | l | 236 | EC | м | |
109 | 6D | m | 237 | ED | н | |
110 | 6E | n | 238 | EE | о | |
111 | 6F | o | 239 | EF | п | |
112 | 70 | p | 240 | F0 | р | |
113 | 71 | q | 241 | F1 | с | |
114 | 72 | r | 242 | F2 | т | |
115 | 73 | s | 243 | F3 | у | |
116 | 74 | t | 244 | F4 | ф | |
117 | 75 | u | 245 | F5 | х | |
118 | 76 | v | 246 | F6 | ц | |
119 | 77 | w | 247 | F7 | ч | |
120 | 78 | x | 248 | F8 | ш | |
121 | 79 | y | 249 | F9 | щ | |
122 | 7A | z | 250 | FA | ъ | |
123 | 7B | { | 251 | FB | ы | |
124 | 7C | | | 252 | FC | ь | |
125 | 7D | } | 253 | FD | э | |
126 | 7E | ~ | 254 | FE | ю | |
127 | 7F | Спец. DEL | 255 | FF | я |
ASCII таблица кодов символов Windows.
Описание специальных (управляющих) символов Следует отметить, что первоначально управляющие символы таблицы ASCII использовались для обеспечения обмена данными по телетайпу, ввода данных с перфоленты и для простейшего управления внешними устройствами.
В настоящее время большинство из управляющих символов ASCII таблицы уже не несут эту нагрузку и могут использоваться для иных целей.
Код | Описание |
---|---|
NUL, 00 | Null, пустой |
SOH, 01 | Start Of Heading, начало заголовка |
STX, 02 | Start of TeXt, начало текста. |
ETX, 03 | End of TeXt, конец текста |
EOT, 04 | End of Transmission, конец передачи |
ENQ, 05 | Enquire. Прошу подтверждения |
ACK, 06 | Acknowledgement. Подтверждаю |
BEL, 07 | Bell, звонок |
BS, 08 | Backspace, возврат на один символ назад |
TAB, 09 | Tab, горизонтальная табуляция |
LF, 0A | Line Feed, перевод строки. Сейчас в большинстве языков программирования обозначается как \n |
VT, 0B | Vertical Tab, вертикальная табуляция. |
FF, 0C | Form Feed, прогон страницы, новая страница |
CR, 0D | Carriage Return, возврат каретки. Сейчас в большинстве языков программирования обозначается как \r |
SO, 0E | Shift Out, изменить цвет красящей ленты в печатающем устройстве |
SI, 0F | Shift In, вернуть цвет красящей ленты в печатающем устройстве обратно |
DLE, 10 | Data Link Escape, переключение канала на передачу данных |
DC1, 11 DC2, 12 DC3, 13 DC4, 14 | Device Control, символы управления устройствами |
NAK, 15 | Negative Acknowledgment, не подтверждаю. |
SYN, 16 | Synchronization. Символ синхронизации |
ETB, 17 | End of Text Block, конец текстового блока |
CAN, 18 | Cancel, отмена переданного ранее |
EM, 19 | End of Medium, конец носителя данных |
SUB, 1A | Substitute, подставить. Ставится на месте символа, значение которого было потеряно или испорчено при передаче |
ESC, 1B | Escape Управляющая последовательность |
FS, 1C | File Separator, разделитель файлов |
GS, 1D | Group Separator, разделитель групп |
RS, 1E | Record Separator, разделитель записей |
US, 1F | Unit Separator, разделитель юнитов |
DEL, 7F | Delete, стереть последний символ. |
Множество символов, с помощью которых записывается текст, называется алфавитом .
Число символов в алфавите – это его мощность .
Формула определения количества информации: N = 2 b ,
где N – мощность алфавита (количество символов),
b – количество бит (информационный вес символа).
В алфавит мощностью 256 символов можно поместить практически все необходимые символы. Такой алфавит называется достаточным.
Т.к. 256 = 2 8 , то вес 1 символа – 8 бит.
Единице измерения 8 бит присвоили название 1 байт:
1 байт = 8 бит.
Двоичный код каждого символа в компьютерном тексте занимает 1 байт памяти.
Каким же образом текстовая информация представлена в памяти компьютера?
Удобство побайтового кодирования символов очевидно, поскольку байт — наименьшая адресуемая часть памяти и, следовательно, процессор может обратиться к каждому символу отдельно, выполняя обработку текста. С другой стороны, 256 символов – это вполне достаточное количество для представления самой разнообразной символьной информации.
Теперь возникает вопрос, какой именно восьмиразрядный двоичный код поставить в соответствие каждому символу.
Понятно, что это дело условное, можно придумать множество способов кодировки.
Все символы компьютерного алфавита пронумерованы от 0 до 255. Каждому номеру соответствует восьмиразрядный двоичный код от 00000000 до 11111111. Этот код просто порядковый номер символа в двоичной системе счисления.
Таблица, в которой всем символам компьютерного алфавита поставлены в соответствие порядковые номера, называется таблицей кодировки.
Для разных типов ЭВМ используются различные таблицы кодировки.
Международным стандартом для ПК стала таблица ASCII (читается аски) (Американский стандартный код для информационного обмена).
Таблица кодов ASCII делится на две части.
Международным стандартом является лишь первая половина таблицы, т.е. символы с номерами от 0 (00000000), до 127 (01111111).
Структура таблицы кодировки ASCII
Порядковый номер | Код | Символ |
0 — 31 | 00000000 — 00011111 | Символы с номерами от 0 до 31 принято называть управляющими. |
32 — 127 | 00100000 — 01111111 | Стандартная часть таблицы (английский). Сюда входят строчные и прописные буквы латинского алфавита, десятичные цифры, знаки препинания, всевозможные скобки, коммерческие и другие символы. |
128 — 255 | 10000000 — 11111111 | Альтернативная часть таблицы (русская). |
Первая половина таблицы кодов ASCII
Обращаю ваше внимание на то, что в таблице кодировки буквы (прописные и строчные) располагаются в алфавитном порядке, а цифры упорядочены по возрастанию значений. Такое соблюдение лексикографического порядка в расположении символов называется принципом последовательного кодирования алфавита.
Для букв русского алфавита также соблюдается принцип последовательного кодирования.
Вторая половина таблицы кодов ASCII
К сожалению, в настоящее время существуют пять различных кодировок кириллицы (КОИ8-Р, Windows. MS-DOS, Macintosh и ISO). Из-за этого часто возникают проблемы с переносом русского текста с одного компьютера на другой, из одной программной системы в другую.
Хронологически одним из первых стандартов кодирования русских букв на компьютерах был КОИ8 («Код обмена информацией, 8-битный»). Эта кодировка применялась еще в 70-ые годы на компьютерах серии ЕС ЭВМ, а с середины 80-х стала использоваться в первых русифицированных версиях операционной системы UNIX.
От начала 90-х годов, времени господства операционной системы MS DOS, остается кодировка CP866 («CP» означает «Code Page», «кодовая страница»).
Компьютеры фирмы Apple, работающие под управлением операционной системы Mac OS, используют свою собственную кодировку Mac.
Кроме того, Международная организация по стандартизации (International Standards Organization, ISO) утвердила в качестве стандарта для русского языка еще одну кодировку под названием ISO 8859-5.
Наиболее распространенной в настоящее время является кодировка Microsoft Windows, обозначаемая сокращением CP1251.
С конца 90-х годов проблема стандартизации символьного кодирования решается введением нового международного стандарта, который называется Unicode . Это 16-разрядная кодировка, т.е. в ней на каждый символ отводится 2 байта памяти. Конечно, при этом объем занимаемой памяти увеличивается в 2 раза. Но зато такая кодовая таблица допускает включение до 65536 символов. Полная спецификация стандарта Unicode включает в себя все существующие, вымершие и искусственно созданные алфавиты мира, а также множество математических, музыкальных, химических и прочих символов.
Попробуем с помощью таблицы ASCII представить, как будут выглядеть слова в памяти компьютера.
Внутреннее представление слов в памяти компьютера
Иногда бывает так, что текст, состоящий из букв русского алфавита, полученный с другого компьютера, невозможно прочитать — на экране монитора видна какая-то «абракадабра». Это происходит оттого, что на компьютерах применяется разная кодировка символов русского языка.
Что такое двоичное кодирование — блог Coders Tool
Двоичное кодирование — это процедура преобразования данных в форму, которая легко используется различными компьютерными операционными системами. Это достигается путем преобразования двоичных данных в строковый формат ASCII, в частности, преобразования 8-битных данных в 7-битный формат, который используется в качестве стандартного набора печатаемых символов ASCII. ASCII, американский стандартный код для обмена информацией, был разработан AT&T в начале 1960-х годов и является наиболее широко используемым форматом кодирования символов.Современная кодировка символов по-прежнему основана на ASCII, хотя поддерживает множество дополнительных символов и разные языки.
Исходный код символа ASCII, который содержит 128 различных символов, пронумерованных от 0 до 127. ASCII и 7-битный ASCII являются синонимами. Поскольку 8-битный байт является общим элементом хранения, ASCII оставляет место для 128 дополнительных символов, которые используются для представления множества символов иностранного языка и других символов (см. Кодовую страницу). Если не используется ни одна из дополнительных комбинаций символов (128–255), первый бит байта равен 0.
Некоторые концепции и термины, с которыми необходимо ознакомиться, включают:
- Двоичное кодирование, предоставляет команды для кодирования значений в форматы base64, шестнадцатеричные и uuencode.
- base64, это метод кодирования двоичных данных в формате ASCII.
- uuencode, это формат для кодирования двоичных данных.
- ASCII: Американский стандартный код для обмена информацией, опубликованный ANSI, определяет набор из 128 символов (управляющих символов и графических символов, таких как буквы, цифры и символы) с их кодированным представлением.646 — это интернационализированная версия ASCII. ISO / IEC 8859 — это набор 8-битных кодов на основе ASCII, предназначенный для объединения со стандартным набором управляющих последовательностей терминала.
- Текст в двоичный код, кодирование и преобразование текста в байты. Компьютеры хранят инструкции, тексты и символы как двоичные данные. Все символы Unicode могут быть представлены только единицами и нулями (двоичными числами) в кодировке UTF-8. Эти двоичные кодировки Unicode предназначены для использования при сжатии коротких строк и поддерживают порядок кодовых точек.
Простое двоичное кодирование
SBE, Простое двоичное кодирование — это протокол двоичного формата для декодирования и кодирования сообщений. Он разработан для обеспечения низкой задержки и детерминированной производительности.
Формат сообщения, закодированного в двоичном формате, задается с использованием собственных примитивных типов данных (целые числа, символы), поэтому нет необходимости переводить данные в строку. SBE касается только представления данных; структура сообщения не подлежит спецификациям бизнес-уровня. Поддерживает поля как фиксированной, так и переменной длины.
Макет сообщения указывается в шаблоне (схеме) SBE, который основан на XML. Прототип определяет, что поля принадлежат сообщению и где они находятся в сообщении. Он также определяет допустимые диапазоны значений и факты, такие как постоянные значения, которые не нужно отправлять по сети.
Что такое кодировка Base64?
Base64 обеспечивает безопасный способ передачи двоичных данных в виде только печатаемых символов ASCII по компьютерной сети. Он обычно используется, когда необходимо кодировать двоичные данные, которые необходимо хранить и передавать на носителях, предназначенных для работы с ASCII.Данные можно безопасно передавать без возможности потери данных из-за смешения управляющих символов. Кодировка Base64 является наиболее популярной из «базовой кодировки» символов, которая включает такие форматы, как Base 16 или Base 32. Base64 предлагает высокий уровень взаимодействия между широким спектром различных систем. В современных технологиях Base64 является самой популярной технологией кодирования и декодирования двоичных данных.
Base 64 Alphabet
Base64 использовал следующее подмножество символов US-ASCII.
[0-9] — 10 знаков
[az] — 26 знаков
[AZ] — 26 знаков
[/] — 1 знак [знак-заполнитель] [+] — 1 знак [знак-заполнитель] [=] — Используется для заполнения, как объяснено позже.
Base64 использует 6 бит. Это позволяет использовать до 64 символов. Вы заметите, что общее количество прописных букв, строчных букв и цифр в сумме составляет 62. «+» и «/» обозначены как заполнители и заполняют пробел, составляя 64 символа. Символы Base64 формируются путем взятия блока из трех октетов для формирования 24-битной строки, которая преобразуется в четыре символа Base64.
Символы в алфавите Base 64 включают, ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz / +
Десятичный кодовый двоичный код Десятичный код
В вычислительных приложениях код десятичный или двоично-десятичный код. Этот тип двоичного кодирования использует 4 двоичных числа для представления 10 цифр от 0 до 9 в десятичном числе. Это форма двоичного цифрового кодирования, в которой используется двоичный десятичный код.Этот вариант двоичной формы кодирования кода BCD использует четыре бита для хранения десятичного числа. Это обеспечивает быстрое и эффективное преобразование между двоичным и десятичным числами. Этот метод кодирования чаще всего используется при проектировании систем бухгалтерского учета, поскольку они часто требуют точных вычислений для очень длинных цепочек чисел. По сравнению с общей нотацией с плавающей запятой, использование кода BCD может обеспечить числа с высокой точностью, которые требуют вычислений с высокой точностью, и избежать времени, затрачиваемого компьютером на кодировщик операций с плавающей запятой.
Base64 преобразует последовательность байтов в последовательность символов, каждый из которых представляет шесть битов. Каждая последовательность из трех незакодированных байтов будет аккуратно попадать в последовательность из четырех закодированных символов, каждый из которых представляет одни и те же двадцать четыре бита.
Если последовательность байтов для кодирования неравномерно распадается на три байта за раз, оставшиеся байты по-прежнему упорядочиваются в четыре закодированных символа. Знаки равенства используются для обозначения заполнителя, который не будет декодирован в исходные данные.В зависимости от длины исходных данных закодированные символы могут оканчиваться нулем, одним или двумя знаками равенства.
Практическое использование Base64 Encode
- Base64 на одном из основных столпов, который поддерживает создание и работу сообщений электронной почты. Base64 является неотъемлемой частью структурирования электронных писем, которые нуждаются в вложениях, таких как изображения, видео, документы или любые другие форматы файлов.
- Base-64 может кодировать и передавать любые наборы двоичных данных через разнородную систему, а затем декодировать их в исходные двоичные данные.
- XML-документы могут использоваться для хранения двоичного содержимого. Двоичные данные могут быть закодированы в кодировке Base-64 и указаны в любом документе XML 1.0.
- Базовая аутентификация HTTP кодируется с использованием варианта RFC2045-MIME Base64, за исключением того, что не ограничивается 76 символами в строке. И имя пользователя, и пароль объединяются одним двоеточием.
Это делается не из соображений безопасности, а как средство экранирования специальных символов.
Передача данных HTTP, кодирование содержимого и кодирование передачи
Есть две конкретные проблемы, которые HTTP должен был решить, чтобы ввести в свои сообщения широкий спектр типов мультимедиа: кодирование данных и определение их формы и функций.Как мы уже видели, HTTP заимствует у MIME понятие медиаформ и заголовок Content-Type для обработки распознавания типа.
Аналогичным образом он заимствует принципы и заголовки MIME для решения проблемы кодирования. Но здесь мы сталкиваемся с некоторыми большими различиями между HTTP и MIME.
Кодирование было серьезной проблемой для MIME, поскольку оно было разработано с использованием старого формата сообщений электронной почты RFC 822 для конкретной цели отправки нетекстовых данных. RFC 822 налагает много больших ограничений на передаваемые сообщения, наиболее важным из которых является шифрование данных с использованием 7-битного ASCII.Даже сообщения RFC 822 ограничены строками не более 1000 символов, заканчивающимися последовательностью «CRLF».
Эти ограничения означают, что произвольные двоичные файлы, которые не имеют определения строки и состоят из байтов, каждый из которых может содержать значение от 0 до 255, не могут быть отправлены в их собственном формате с использованием RFC 822. Чтобы передать эти файлы, MIME должен закодировать их, используя такой метод, как base64, который преобразует три 8-битных символа в набор из четырех 6-битных символов, которые могут быть выражены в ASCII.
Заголовок MIME Content-Transfer-Encoding используется в сообщении, когда выполняется такое преобразование, чтобы получатель мог отменить кодирование, чтобы вернуть данные в их нормальную форму.
Теперь, хотя этот метод работает, он менее эффективен, чем отправка данных непосредственно в двоичном формате, поскольку кодирование base64 увеличивает размер сообщения на 33 процента (три байта кодируются с использованием четырех символов ASCII, для каждого из которых требуется один байт для отправки). Сообщения HTTP отправляются непосредственно через TCP-соединение между клиентом и сервером и не используют стандарт RFC 822.
Это позволяет передавать двоичные данные между HTTP-клиентами и серверами без необходимости кодирования base64 или других методов преобразования.Поскольку отправка данных в незакодированном виде более эффективна, это может быть одной из причин, по которой разработчики HTTP решили не делать протокол строго совместимым с MIME.
Что такое двоичный файл ?: Полное руководство
Двоичные файлы — это тип файлов, которые используются для хранения данных в виде непрерывных байтов, в которых метод чтения не определен. Это означает, что программе, пытающейся прочитать двоичный файл, нужно указать, как его читать. Если вы попытаетесь открыть двоичный файл с помощью обычного текстового редактора, вы заметите, что на экране появляются неизвестные или нечитаемые символы.Это связано с тем, что ваш редактор предполагает, что данные в текстовых файлах закодированы как текст. Поскольку файл не закодирован как текст, он не может быть прочитан текстовым редактором.
Найди свой матч на тренировочном лагере
- Карьера Карма подойдет вам с лучшими техническими учебными курсами
- Получите эксклюзивные стипендии и подготовительные курсы
В этой статье рассматривается, что такое двоичные файлы, чем они отличаются от традиционных текстовых файлов и где их использовать.Давайте разберемся, как работают файлы, прежде чем сравнивать их.
Что такое двоичный файл?
Двоичный файл — это файл, не содержащий текста. Он используется для хранения данных в виде байтов, которые обычно интерпретируются как нечто иное, чем текстовые символы. Эти файлы обычно содержат инструкции в своих заголовках, чтобы определить, как читать данные, хранящиеся в них. Их можно использовать для хранения любого типа данных на компьютере.
Найди свой матч на тренировочном лагере
- Карьера Карма подойдет вам с лучшими техническими учебными курсами
- Получите эксклюзивные стипендии и подготовительные курсы
Хотите узнать больше о том, как учебный курс по программированию может помочь вам научиться программировать? Начните с поиска подходящего для вас учебного лагеря, а также получения дополнительной информации о стоимости и обзорах учебного лагеря.
Несмотря на то, что все файлы хранят данные одинаково, ваша операционная система не обрабатывает их все одинаково. Это означает, что даже несмотря на то, что звуковой файл и изображение хранятся в файловой системе в виде непрерывных строк данных, изображение не может воспроизводиться в музыкальном проигрывателе, а также не может быть открыт музыкальный файл в программном обеспечении для просмотра фотографий. Формат файла смягчает это поведение. Расширения, такие как «.mp3» и «.jpg», прикрепленные к файлам, используются для определения типа данных, которые они должны содержать.
Вообще говоря, все файлы можно разделить на два основных формата — текстовый и двоичный. Двоичные файлы охватывают все нетекстовые файлы, в то время как текстовые файлы имеют очень строгие ограничения и могут хранить только текстовые данные.
Двоичные файлы могут хранить любые данные, если заголовок файла точно определяет тип файла и другую важную информацию, такую как размеры блока и тела. Давайте теперь поймем различия и сходства между ними.
Двоичный файлпротив текстового файла
Хотя двоичные и текстовые файлы хранят данные в виде последовательности битов, они сильно отличаются друг от друга.Давайте посмотрим на эти два формата независимо друг от друга.
Двоичные файлы
В эту категорию попадают все файлы, которые не используются для хранения текстовых данных. Любой пользовательский тип файла может быть создан с использованием двоичного файла, если необходимая информация о том, как читать файл, хранится в файле. Эти файлы хранят в одном файле несколько типов данных, таких как изображения, видео и аудио. Единственное требование, которое они предъявляют, — это наличие подходящей программы для чтения такого рода данных в системе.
Формат PNG — отличный пример вышеупомянутого варианта использования. Файл PNG может быть прочитан большинством программ просмотра изображений и содержит графическую информацию. Если вы откроете файл PNG в текстовом редакторе, большая часть файла будет состоять из нераспознаваемых символов. Но вы также найдете фрагменты читаемого текста, разбросанные по всему файлу. Это связано с тем, что файл PNG включает небольшие разделы для хранения текстовых данных вместе с графической информацией. Некоторые другие форматы файлов также поддерживают это, и это возможно из-за динамической природы двоичных файлов.
Двоичные файлы содержат заголовок вверху. Этот заголовок является ключом к файлу. Он используется для хранения информации, идентифицирующей содержимое файла. Обычно заголовки содержат тип файла и другие метаданные, такие как размер и дату последнего изменения. Если заголовок двоичного файла поврежден, это эквивалентно потере ключа, что означает, что вы больше не можете получить доступ к значимым данным из файла.
Текстовые файлы
Текстовые файлы можно рассматривать как сокращенную версию двоичных файлов.Они могут хранить только текстовые данные. Все текстовые файлы соответствуют как минимум стандарту ASCII для хранения данных. Текстовые файлы можно просматривать в любом текстовом редакторе. Такая простота просмотра данных делает их менее подверженными непреднамеренному повреждению данных, поскольку любые повреждения легко обнаруживаются текстовыми редакторами.
Текстовые файлы поддерживают несколько форматов для хранения форматированных и простых текстовых данных. Файл TXT хранит неформатированный исходный текст только с окончаниями строк и файлов, тогда как более сложный RTF (Rich Text Format) может хранить форматированный текстовый контент со стилями, такими как полужирный и курсив.Помимо минимального стандарта кодирования ASCII, современные текстовые файлы поддерживают даже обширные стандарты, такие как UTF (текстовый формат Unicode). Такие стандарты позволяют хранить в текстовых файлах более широкий диапазон символов и легко их читать.
Существуют даже более продвинутые форматы файлов, такие как DOC и DOCX, которые объединяют текстовые и двоичные файлы для удобства пользователей. Например, DOCX — это стандарт, используемый Microsoft Word для хранения текстовых файлов вместе с метаданными, которые могут помочь лучше просматривать текстовое содержимое внутри приложения Word.Если вы хотите убедиться в этом сами, попробуйте переименовать файл document.docx в document.docx.zip, а затем откройте его с помощью любого инструмента для распаковки. Вы найдете текстовый файл вместе с несколькими файлами XML, в которых хранятся метаданные документа.
Преимущества использования двоичных файлов
Двоичные файлы обладают множеством преимуществ по сравнению с обычными текстовыми файлами. Давайте посмотрим на некоторые из них:
Эффективность за счет сжатия
Данные хранятся в двоичных файлах в соответствии с пользовательскими правилами оптимизации для конкретных случаев использования.PNG является отличным примером этого, потому что его можно использовать для создания небольших и эффективных файлов изображений.
Лучшая безопасность
И снова настройка, которую предлагают двоичные файлы, позволяет предприятиям создавать собственные стандарты кодирования, которые может быть сложно реконструировать. Чаще всего единственный способ прочитать двоичный файл с настраиваемой кодировкой — это угадать, как в нем хранятся данные.
Несравненная скорость
Поскольку данные хранятся в необработанном формате и не кодируются с использованием каких-либо стандартов кодировки символов, их быстрее читать и сохранять.Это основная причина, по которой хранилища данных для приложений не создаются с использованием текстовых файлов.
Проблемы с двоичными файлами
Хотя двоичные файлы имеют много преимуществ по сравнению с обычными текстовыми файлами, они также создают несколько проблем. Ниже приведены наиболее распространенные проблемы, с которыми сталкиваются при использовании двоичных файлов:
Сложно манипулировать
Двоичные файлы не могут быть прочитаны обычными текстовыми процессорами, поэтому их редактирование является сложной задачей. Чаще всего приложения предпочитают сохранять свои данные с помощью пользовательских схем кодирования.Затем этими данными можно будет манипулировать только внутри приложений с той же схемой кодирования.
Повышение эффективности неравномерно
Хотя хранение данных в двоичном формате может быть быстрым и эффективным в таких форматах, как PNG, другие типы данных могут не получить каких-либо заметных преимуществ в производительности. Сохранение текстовых данных добавляет еще одну проблему кодирования и декодирования данных во время просмотра.
Может запутать машины
Компьютеры могут иметь разные способы хранения данных и доступа к ним.Когда двоичные данные передаются между двумя компьютерами с разной архитектурой, могут возникнуть проблемы, подобные NUXI. Если компьютер сохраняет «UNIX» в двоичном файле, а файл открывается на другом компьютере с другой архитектурой, он может читаться как «NUXI». Текстовые данные, хранящиеся в TXT или аналогичных форматах, невосприимчивы к таким проблемам из-за наличия таких стандартов, как ASCII.
Где используются двоичные файлы?
Увидев различные аспекты двоичных файлов, теперь важно понять, где их использовать.Вот некоторые из основных вариантов использования двоичных файлов:
- Разработка программного обеспечения. Большинство компиляторов, таких как JVM, создают оптимизированный байт-код из исходного кода для более быстрого выполнения. Хотя исходный код хранится в виде текстовых файлов, аналогично хранить байт-код не имеет особого смысла. Это так, потому что исходный код должен быть просмотрен разработчиком в процессе создания программного обеспечения, а байт-код должен быть прочитан машиной. Машины всегда будут быстрее обрабатывать байты, а не закодированные символы.
- Обработка изображений. Как упоминалось ранее, большинство форматов изображений, например PNG, хранятся в виде двоичных файлов для оптимизации производительности, а также позволяют хранить небольшие файлы изображений. Если бы данные, связанные с файлом фильма, были в форме закодированных символов, стандартный DVD никогда не смог бы сохранить весь фильм.
- Разработка игр. Игры требуют большого количества целочисленных и символьных вычислений. Эти числа удобно хранить в виде байтов и оперировать с ними, поскольку кодирование и декодирование 32-битного целого числа увеличивает время процесса.
- Хранение больших наборов данных. Наборы данных для таких задач, как обучение модели машинного обучения, часто требуется хранить и делать доступными для компьютеров. Хотя хранение набора данных в текстовом файле имеет смысл, поскольку его легко просматривать, это может вызвать проблемы с производительностью компьютера.
Заключение
Текстовые файлы являются наиболее популярным стандартом для хранения данных среди обычных пользователей компьютеров, поскольку они легко читаются и могут также поддерживать форматирование.
Но для людей, которые занимаются разработкой программного обеспечения, текстовые файлы обычно не подходят для хранения и обработки данных внутри программ.Данные конфигурации, относящиеся к программным проектам, обычно хранятся в двоичных файлах. Двоичные файлы обеспечивают непревзойденную скорость и эффективность при выполнении операций с сохраненными данными. Если вы хотите создать приложение, включающее файлы, двоичный формат файла — это то, что вам нужно!
ASCII и двоичное представление
Обзор
На этом уроке студенты учатся использовать свою первую двоичную систему для кодирования информации, систему ASCII для представления букв и других символов.В начале урока учитель вводит тот факт, что компьютеры должны представлять информацию, используя либо «включено», либо «выключено». Затем учащихся знакомят с системой ASCII для представления текста с помощью двоичных символов. Студенты практикуются в использовании этой системы, прежде чем кодировать собственное сообщение с помощью ASCII. В конце урока подведение итогов помогает обобщить ключевые учебные цели занятия.
Назначение
Этот урок дает возможность установить некоторые связи с реальным миром из предыдущего урока и рассмотреть некоторые концепции, которые студенты увидели в этом упражнении.Студенты формально знакомятся с концепцией двоичной системы, узнают, что такое бит информации, и получают практику использования двоичной системы. Студенты рассматривают тот факт, что шаблоны битов могут использоваться для представления информации, и размышляют, почему наличие шаблонов одинаковой длины (в данном случае 7 битов) упрощает использование системы.
Возможности оценки
Определите двоичную систему как систему, которая использует только два возможных состояния для представления информации
Заключение: учащиеся должны использовать определение двоичных систем, чтобы объяснить, почему «единицы и нули» могут быть одним из способов описания внутренней работы компьютера.
Используйте систему ASCII для кодирования и декодирования текстовой информации в двоичном формате
Руководство по занятиям: сообщения должны быть правильно закодированы и декодированы в руководстве по занятиям. Убедитесь, что учащиеся используют только два элемента в задаче кодирования и что в закодированном сообщении нет пробелов.
Повестка дня
Разминка (5 минут)
Активность (40 минут)
Подведение итогов (10 минут)
Посмотреть на Code Studio
Цели
Студенты смогут:
- Определите двоичную систему как систему, которая использует только два возможных состояния для представления информации
- Используйте систему ASCII для кодирования и декодирования текстовой информации в двоичном формате
Препарат
- Распечатанные копии руководства по деятельности
Ссылки
Внимание! Сделайте копии всех документов, которыми вы планируете поделиться со студентами.
Учителям
Студентам
Разминка (5 минут)
Просмотр действий с бинарными картами
Учебный совет
Перейти к упражнению: Этот вводный комментарий важен для обоснования закономерностей, которые студенты увидят в руководстве к упражнению.В противном случае, однако, большая часть обсуждения в этом уроке может происходить после занятия.
Примечания
Современные компьютеры — это электронные устройства, заполненные множеством крошечных проводов. Эти провода несут электричество, и в любой момент провод может быть включен (высокое напряжение) или выключен (низкое напряжение). Фактически, всю информацию, которую вы когда-либо использовали на компьютере, такую как документы, видео и изображения, в конечном итоге необходимо преобразовать в эти сигналы «включено» и «выключено». Это действительно серьезная проблема, и мы собираемся изучить ее в следующих нескольких уроках.
Активность (40 минут)
Использование ASCII
Группа: Разместите учеников парами
Раздайте: руководство по занятиям каждой паре учеников
Текстовое руководство в формате ASCII
Уголок содержания
Почему бы не разделить символы: При отправке информации по проводу с помощью электричества нет способа поставить «пробел» между сигналами.В любой момент вы либо посылаете электричество, либо нет. Это основная причина, по которой символы имеют согласованную длину, в данном случае 7 бит.
Почему двоичный ?: Прочтите этот раздел всем классом
Словарь: Просмотрите определения терминов.
- Двоичный: способ представления информации с использованием только двух опций
- ASCII: популярная система для представления текста в двоичном формате
ASCII: Просмотрите таблицу ASCII.Сообщите учащимся, что ASCII — это система, которую, вероятно, использует каждый компьютер, который они когда-либо использовали для представления букв. Сегодня они собираются попрактиковаться в использовании этой системы.
Задания: Попросите учащихся расшифровать три сообщения.
Сделай сам: Попросите учащихся разработать свою собственную простую двоичную систему, придумав, какими будут символы «Вкл.» И «Выкл.». Затем попросите их написать свои сообщения с использованием ASCII, обменяться с партнером и декодировать.Если есть время, попросите студентов обменяться с несколькими группами.
Подведение итогов (10 минут)
Возможность оценки
Обсуждая статус, студенты должны понимать, что «0 и 1» — это просто еще одна двоичная пара, которая может использоваться для обозначения включения-выключения. Если они явно не определяют бинарную систему как систему, в которой есть только два состояния, продолжайте подвергать сомнению их объяснения, пока оно не появится.
Поделиться: Какие символы вы использовали в своей двоичной системе? Пусть класс поделится своими идеями.
Подсказка: Как вы думаете, почему мы иногда слышим, как люди говорят, что информатика — это «нули и единицы»? Должны ли быть нули и единицы?
Обсудить: Предложите студентам индивидуально разработать ответы, затем поделитесь ими в небольших группах, а затем со всей группой.
Словарь: Представьте словарь
Уголок содержания
Пока игнорируйте числа: Представленная здесь система ASCII — это всего лишь система для представления символов с образцами битов .На самом деле символы часто ассоциируются с числами, связанными с двоичным шаблоном. Если это произойдет, подтвердите, что есть много дополнительной информации об этой системе, но придерживайтесь этого определения.
Символ включения-выключения: Студенты, возможно, уже видели этот значок включения-выключения раньше. Это просто 0 и 1 вместе взятые!
Исследование: Если у вас есть больше времени, зайдите в Интернет, например на страницу Википедии для ASCII и попросите учащихся изучить, какие еще символы включены в систему ASCII.Удивлены ли они чему-нибудь, что они там видят? Есть ли символы, которые они не думали, что должны изображать?
- Бит: единичный фрагмент двоичной информации
Примечания
Сегодня мы видели фрагменты информации, представленные разными способами, например, собак / кошек или яблок / бананов. Все это одинаково допустимые способы представления включений и выключений. В дальнейшем мы будем использовать 1 и 0, но это просто означает «Вкл.» И «Выкл.».
Узнайте, как работает двоичное кодирование (это веселее и полезнее, чем вы думаете)
Данные требуют контекста для создания смысла.
Допустим, я отправил вам текстовое сообщение, содержащее всего <3
. Возможно, вы сначала спросили меня, сколько чего-то у меня есть. В этом случае вы интерпретируете <3
как что-то вроде «Я не знаю точно, но меньше трех». Или, возможно, ваше предыдущее сообщение также было <3
, и в этом случае мое, вероятно, означает: «Я тоже тебя люблю». Данные ( <3
) остались прежними, но их значение изменилось в зависимости от контекста.
Почему это важно для нас, программистов или аналитиков данных? Потому что компьютеры понимают только одну форму данных: двоичные .Это ставит нас перед проблемой: как представить все виды данных, с которыми приходится иметь дело, если у нас есть только нули и единицы? Другими словами, как компьютер узнает, что мы имеем в виду ? Откуда смысл?
Вот здесь-то и появляется "кодировка".
По сути, кодировка - это словарь. Он говорит нам, как сопоставить один набор вещей с другим набором вещей. Для компьютеров кодировки отображают данные на нули и единицы.
Человеческий язык кодирует идеи
Encoding не только для компьютеров.Любое отображение данных из одной формы в другую - это кодирование.
Человеческий язык - яркий тому пример. Я могу кодировать идею в колебания воздуха , произнося слова вслух. Я могу кодировать эти произнесенные слова в символы, которые пишу на листе бумаги. Затем вы можете вернуться в обратном направлении, начав с письменных символов, преобразовав их обратно в звуки, которые они издают при чтении вслух, и, наконец, в идеи, которые они представляют.
Человеческий язык - это кодировка с потерями . Нам всем трудно точно представить наши идеи, когда мы говорим или излагаем их на бумаге. Никакие два профессиональных переводчика не сделают одинаковый результат при одинаковом вводе. Когда кто-то слышит или читает наши слова, они не имеют того значения, с которого мы начали. И все же мы все еще можем делиться друг с другом идеями с достаточной степенью точности, потому что мы используем избыточность и контекст , чтобы сделать интерпретацию нашего смысла более точной.
Компьютерные кодировки отображают данные в двоичном формате
Когда мы имеем дело с компьютерами и данными, у нас нет возможности использовать избыточность, чтобы помочь компьютеру понять, что мы пытаемся сделать. Не существует «достаточно близко», потому что компьютер не может думать . Он может только следовать нашим инструкциям. Для компьютеров все заключается в предоставлении контекста.
Цель кодирования данных - сделать однозначным и неизменным отображением между фрагментом данных и двоичным значением.Это отображение - контекст компьютера.
Что такое бинарный?
Компьютеры - это электронные устройства, которые хранят данные с помощью крошечных физических вещей, которые могут находиться в одном из двух состояний: «включено» или «выключено». Для удобства мы отображаем их на 1
и 0
(кодировка!), Чтобы мы могли рассматривать эти состояния как двоичные числа.
Двоичное значение - это последовательность нулей и единиц. Не больше, не меньше. Просто несколько нулей и единиц, склеенных в определенном порядке.Мы называем каждую позицию «битом», и именно в битах происходит вся магия. Если у вас есть четыре куска, это называется «кусочек». Если у вас есть восемь битов, это «байт». (Классическая группировка битов в байты является исторической и технической, не свойственной идее двоичного кодирования.)
Итак, у нас есть куча битов, что теперь? Это все примерно комбинация . Сколько способов мы можем «перевернуть» биты (преобразовать их из 0
в 1
или наоборот), чтобы получить уникальную последовательность ?
Один бит генерирует только два уникальных результата: 0
и 1
.
Два бита могут дать нам 00
, 01
, 10
и 11
, всего 4 уникальных последовательности.
Три бита могут дать нам 000
, 001
, 010
, 011
, 100
, 101
, 110
и 111
, всего 8 уникальных последовательностей.
Вы можете заметить здесь шаблон: всего возможных уникальных последовательностей для набора битов равно 2 в степени числа битов.Итак, с полубайтом (4 бита) у нас есть 16 возможных последовательностей, а с байтом (8 бит) у нас есть 256 уникальных последовательностей. Каждый бит, который мы добавляем, удваивает количество получаемых последовательностей.
Чтобы закодировать что-либо в двоичном формате, вам потребуется следующее:
- Подсчет количества уникальных значений данных, которые вы собираетесь кодировать.
- Достаточно битов, чтобы иметь как минимум такого количества уникальных двоичных последовательностей.
- Для каждого уникального значения данных - способ надежно найти уникальную двоичную последовательность для ее сопоставления.
И все! Все двоичное кодирование именно так.
Примеры кодировок
Давайте рассмотрим несколько примеров двоичных кодировок.
Булевы
«Логические» значения могут быть только истинными
или ложными
. Это дает только два уникальных значения, поэтому нам нужен только один бит , чтобы получить соответствующее количество уникальных последовательностей в двоичном формате. Мы могли бы присвоить 0
ложным
и 1
истинным
.Мы могли бы столь же справедливо назначить 1
ложным
и 0
истинным
. В конце концов, значения битов 0
и 1
ничего не значат . Это просто уникальные последовательности, которые мы отображаем на наши данные.
Вы, вероятно, когда-нибудь увидите только логическое значение false
, закодированное с использованием нуля. Это сделает некоторые другие вещи более удобными. Но точно так, не должно быть .
По техническим причинам наименьшим набором битов, с которым вы обычно можете работать, является 8-битный байт.Таким образом, вы обычно не будете использовать один бит для представления логических значений, вместо этого у вас будет 00000000
для false
и 00000001
для true
.
почти всегда работают с байтом , и поэтому почти каждая кодировка будет иметь двоичные значения, которые не отображаются ни на какое значение данных. В случае булевых значений 99,2% (254/256) возможных двоичных последовательностей вообще не используются! Расточительно? Ага! Но это просто, с некоторыми полезными побочными эффектами, и современные компьютеры обычно могут позволить себе много отходов.
Целые числа
По сути, счет - это механический процесс. В десятичной системе счисления я просматриваю числа в указанном порядке (0-9) и, когда я нажимаю наивысшее из них, я увеличиваю число влево и устанавливаю текущее значение обратно на 0 (таким образом, 09
становится 10.
и 19
становится 20
). Это работает одинаково для любой базы, включая базу два (двоичную).
Это позволяет нам создать простой набор правил для кодирования десятичных (основание 10) значений в двоичном формате.Просто запустите механический процесс на обоих одновременно и сравните полученные значения вместе! Таким образом, Dec 0
(десятичный 0) - Bin 0
(двоичный 0), Dec 1
- Bin 1
, Dec 2
- Bin 10
, Dec 3
- Bin 11
и скоро.
(Опять же, мы могли бы создать любое произвольное сопоставление, какое захотим. У нас нет , у нас нет для сопоставления десятичных и двоичных значений путем подсчета. Я мог бы решить, что я хочу, чтобы Bin 0101
означал Dec 99
, если бы я хотел к.Выбраны особые кодировки, потому что они делают то, что мы пытаемся сделать более удобным.)
Таким образом мы можем закодировать счетное (положительное целое) число в двоичном формате. А как насчет отрицательных целых чисел? Один из подходов состоит в том, чтобы зарезервировать один из битов для представления положительного или отрицательного значения (хотя во многих языках используется менее интуитивно понятное кодирование «дополнения до двух»).
Например, предположим, что мы собираемся сохранить число в полубайте. Мы могли бы объявить, что если крайний левый бит в этом полубайте равен 0
, тогда число положительное, а если это 1
, то число отрицательное.Почему мы можем это сделать? Потому что биты ничего не значат! Выбираем их значение.
Теперь мы можем представлять положительные и отрицательные целые числа. Допустим, кто-то дает нам полубайт 1000
; как мы это интерпретируем? Мы должны знать заранее, , использует ли кодировка для этого значения самый левый бит для указания знака.
Отсюда понятия «знаковые» (допускающие отрицательные) и «беззнаковые» (только положительные) целые числа. Если мы будем рассматривать 1000
как целое число без знака, то мы бы сказали, что это означает «десятичная 8», а значения полубайта могут варьироваться от 0
до 15
.Если бы мы рассматривали это целое число со знаком, то мы бы сказали, что это означает «отрицательный 0», поскольку крайнее левое значение - 1
(указывает отрицательный знак), а полубайт может кодировать от -7
до 7
.
(Примечание: да, отрицательный ноль может быть реальным для двоичных целых чисел со знаком.)
Вывод таков: кодирование может быть простым, но если вы не знаете, какая кодировка использовалась для генерации данного двоичного значения, тогда вы можете ошибиться в том, как интерпретировать данные!
Битовые поля
Ранее я говорил о логических значениях и о том, насколько они расточительны при кодировании с использованием полных байтов.К счастью, для типичных приложений эти отходы не имеют большого значения. Но когда каждый дополнительный байт имеет значение (например, при высокопроизводительном сетевом трафике или дорогостоящем хранилище базы данных), эти потраченные впустую биты могут накапливаться.
Вот здесь-то и пригодятся "битовые поля".
В битовом поле вы храните набор логических значений как отдельные биты, где их позиции в байте используются для определения того, о каком логическом значении вы говорите.
Например, предположим, что у вас есть система разрешений, в которой пользователь может иметь любую комбинацию (включая отсутствие) следующих разрешений (отображается только 3 бита):
- Может читать сообщения (
Bin 001
,Dec 1
) - Может редактировать сообщения (
Bin 010
,Dec 2
) - Может создавать сообщения (
Bin 100
,Dec 4
)
В этом случае мы используем позицию zero-eth (индексирование с 0), чтобы указать, может ли пользователь читать сообщения (обычно мы индексируем, начиная с правой стороны байтов).Если бит с индексом 0
(крайняя правая позиция) имеет значение 0
, пользователь не имеет этого разрешения. Если бит равен 1
, то они это делают. Взятые вместе, мы могли бы использовать номер Bin 101
( Dec 5
), чтобы обозначать, что пользователь может читать и создавать сообщения, но не редактировать их.
Наличие каждой битовой позиции, представляющей различное, независимое логическое значение, позволяет нам хранить двоичные данные с максимальной эффективностью, но есть серьезная оговорка: мы должны уже знать, какая позиция представляет какое значение.Это снова кодировка!
Но как вы работаете с конкретными битами? Вы используете «побитовые операторы».
Двумя ключевыми операторами для работы с битовыми полями являются «поразрядное И» (обычно и
в языках программирования) и «поразрядное ИЛИ» ( |
). Побитовое ИЛИ возвращает 1
, если либо значение равно 1
и 0
. Поразрядное И возвращает 1
, если , оба значения равны 1
и 0
в противном случае.Например, 101 | 010 -> 111
и 101 и 010 -> 000
.
Когда устанавливает битовое поле, вы используете побитовое ИЛИ. Чтобы определить, является ли данный бит 1
, вы будете использовать побитовое И. 0 (что равно 1
).1 (что составляет 2
). И так далее.
Для нашего примера разрешений мы создадим битовое поле с всеми разрешениями путем операции ИЛИ для каждой «битовой маски»: Бин 001 | 010 | 100 -> 111
( 1 декабря | 2 | 4 -> 7
) .
Чтобы узнать, есть ли у пользователя разрешение «Может редактировать сообщения», мы ИЛИ поле битов разрешений против битовой маски этого разрешения: Bin 111 & 010 -> 010
( 7 и 2 декабря -> 2
), и мы знать, что у пользователя было разрешение, если результат не равен нулю .
В некоторых языках программирования битовые поля часто используются для установки параметров функции, хотя обычно они запутываются с помощью констант для хранения битовых масок. Например, вы можете увидеть что-то вроде someFunction (argumentOne, OPTION_ONE | OPTION_TWO | OPTION_THREE)
. За кулисами каждая из этих констант OPTION - это битовая маска!
Если вы когда-либо имели дело с разрешениями для файлов Linux, вы могли заметить, что 7
означает «полные разрешения». Почему? Потому что права доступа к файлам - это битовое поле! Три возможных разрешения: «может читать», «может писать», «может выполнять».Как и в приведенном выше примере, вы можете представить это с помощью 3-битного битового поля, и когда все три бита равны 1
(полные разрешения), десятичное представление этого значения будет 7
!
Текст
Мы поговорили о логических и целых числах, но как насчет текста? В конце концов, текст - это просто еще один вид данных.
Начнем с ASCII. Вы можете погуглить "ascii table", чтобы получить стандартную кодировку ASCII. Проще всего понять преобразование десятичных чисел в текстовые символы, просто помните, что под капотом все это двоичное.
ASCII использует только один байт на символ, поэтому он может кодировать только до 256 возможных символов. Эти значения включают такие вещи, как новые строки и пробелы, а также некоторые странные устаревшие вещи, такие как вертикальные табуляции и «колокольчики».
Что делать, если вам нужны символы, которых нет в ASCII? Если вам просто нужен другой набор до 256 символов, вы можете написать свою собственную, полностью отдельную кодировку, содержащую именно те символы, которые вам нужны.
Но что, если вам нужно на больше, чем на , чем на 255 символов? Или что, если вам нужны символы сразу для нескольких языков? Если мне нужны «A» и «♥» в одной строке, мне придется либо переключать кодировки на полпути (и каким-то образом знает это ), либо использовать совершенно другую кодировку, содержащую оба символа.
Это очень сложная проблема, и она имеет множество решений. Преобладает кодировка под названием UTF-8. Он может использовать разное количество байтов для представления разных символов. В UTF8 каждый символ может состоять из разного количества байтов.
Но как ваш компьютер узнает, например, что три байта, составляющие символ ☃ (снеговика), следует читать как один символ, а не как три отдельных символа?
UTF-8 использует ту же идею, что и отрицательные числа в обсуждении выше: биты зарезервированы, чтобы указать, является ли каждый байт частью многобайтового символа! Компьютерная программа проверяет эти биты, чтобы выяснить, нужно ли продолжать чтение байтов, прежде чем искать соответствующий символ для отображения.
Эта «кодировка переменной длины» имеет некоторые интересные последствия. Для ASCII, если вы знаете, сколько байтов содержит ваш текст, вы также знаете, сколько в нем символов (и наоборот). Для UTF-8 вы должны сначала прочитать каждый байт, чтобы подсчитать , сколько различных символов существует, и вы не можете вывести длину байта из длины символа (или наоборот).
Отображение двоичного: шестнадцатеричного и Base64
Отображение двоичных данных является проблемой: нам нужно иметь возможность отображать каждый возможный байт в «печатаемый» символ или последовательность печатаемых символов.ASCII не делает этого за нас, поскольку многие из его символов нельзя распечатать.
Чаще всего вы будете использовать шестнадцатеричную кодировку для просмотра необработанных двоичных файлов. В шестнадцатеричном формате используются символы A-F
и 0-9
, всего 16 символов. Как вы можете вспомнить из вышеизложенного, «полубайт» (4 бита) может представлять до 16 уникальных значений, а байт - это два полубайта, соединенных вместе. Таким образом, шестнадцатеричный символ может представлять полубайт, а два таких символа могут представлять байт. Например, FF
- это 11111111
, 00
- это 00000000
, а 0F
- это 00001111
.
Шестнадцатеричный код требует, чтобы два символа представляли один байт. Но наши символы представляют собой символы ASCII, и нам нужен по одному байту для каждого из них. Итак, чтобы закодировать необработанный двоичный файл как шестнадцатеричный, нам нужно вдвое больше байтов!
Иногда такая расточительность имеет значение, например, с сетевыми данными с высокой пропускной способностью или большими двоичными двоичными объектами ("капля" - это просто псевдоним для группы двоичных данных). В таких случаях и когда необработанный двоичный файл нельзя отправить как есть, вы можете использовать кодировку Base64 для упрощения работы.
Логика кодирования Base64 такая же, как и для шестнадцатеричного (также известного как Base16), но в этом случае мы используем 64 печатных символа вместо 16. Это позволяет нам использовать один символ Base64 для представления 6 бит (вместо 4 битов). of Base16), так что мы можем представить 3/4 байта одним символом вместо 1/2 байта.
"Типы" информируют кодировку
В программировании мы постоянно имеем дело с «типами», то есть с тем, является ли данное значение строкой или целым числом.Компьютер должен знать, что мы пытаемся представить с помощью наших данных, чтобы он мог выполнять правильные задачи с этими данными. «Тип» - это просто кодировка!
Когда мы указываем тип, на самом деле мы предоставляем метаданные, чтобы сообщить языку программирования, как кодируются наши данные.
Правдивость, лживость и нечеткие типы
Во многих языках есть как логические значения , ложные
, так и более общая концепция ложных
. То есть значения, которые не являются логическими и ложными
, но которые мы интерпретируем как таковые для удобства.
Эти виды поведения нечетких типов работают с использованием «приведения типов», то есть когда мы конвертируем значение из одного типа в другой.
В зависимости от того, как мы представляем наши ценности, приведение типов может просто потребовать изменения в интерпретации. Например, целое число 0
будет представлено группой из 0
бит. Логическое значение false
также представляет собой набор из 0
бит. Наконец, пустая строка ""
также обычно представлена группой из 0
бит.Так что под капотом все эти вещи выглядят совершенно одинаково: все они просто нули. Мы можем свободно приводить типы между ними, не меняя ничего, кроме нашей интерпретации этих значений. Поскольку все они выглядят как логическое значение false
, мы можем ссылаться на всю коллекцию как falsey
! Затем мы можем определить «правдивость» как «не ложь», и, таким образом, если любой бит не равен нулю, то данные являются правдивыми.
В других случаях приведение типов - это больше, чем просто оставить данные как есть при применении другой кодировки.Например, что означает преобразование целого числа 5
в логическое? Один из способов - вообще не изменять базовые данные, а просто использовать «правдивость» при оценке значения. Другой вариант - преобразовать его в фактическое логическое значение true
( 00000001
). И ничто не мешает вам сделать что-то совершенно другое, например сказать: «все, что меньше 10, становится логическим ложным
»!
Приведение типов меняет способ интерпретации фрагмента данных, что всегда означает, что меняет свою кодировку .Иногда это означает просто другой взгляд на данные, а иногда - изменение данных, потому что кодировка не поддерживает эти данные. Во всех случаях выбор того, как с ним работать, - , до вас (или, что более вероятно, до людей, создавших ваш язык программирования).
Вот почему вы никогда не можете предположить, что типы и приведение типов, используемые в одном языке, будут работать точно так же в другом. Обычно они чертовски похожи, но почти всегда есть различия, которые могут вас сбить с толку.
Вот несколько забавных примеров:
- В PHP пустой массив
[]
является ложным. - В GameMaker Studio 2 (GMS2, программа для создания видеоигр) любое число меньше
0,5
является ложным. - В JavaScript
NaN == false
даетfalse
(NaN означает «не число»), но приведение его к логическому значению дает значение false, а также обрабатывается какfalse
в операторахif
. Итак,NaN
одновременно ложно и не ложно, в зависимости от контекста. - В JavaScript использование побитового оператора для числа (которое, вероятно, является 64-битным числом с плавающей запятой) сначала преобразует его в 32-битное целое число.
- В JavaScript
10+ "10"
- это"1010"
, а10 * "10"
- это100
. - В Python 2.X
3/2 = 1
, но3,0 / 2 = 1,5
, а в Python 3.X оба равны1,5
.
Метаданные и вывод
Две из повторяющихся тем выше были:
- Кодирование данных - это изобретение, и вы можете кодировать что угодно, как хотите.
- Вы, , должны знать, как что-то было закодировано, чтобы иметь возможность его интерпретировать.
Это оставляет нам проблему: поскольку данные можно закодировать любым старым способом, как мы узнаем их кодировку? Откуда мы берём контекст?
Существует два основных подхода: метаданные, описывающие кодирование, или определение кодировки путем поиска подписей («анализ содержимого») или попытки разумных значений по умолчанию.
Примеры метаданных включают расширения файлов, заголовок HTTP Content-Type и объявления типов.Эта информация не является частью фактических данных, но используется для вывода о кодировке данных.
Анализ содержимого часто используется в Интернете (хотя он имеет риски для безопасности и, вероятно, должен быть отключен на вашем сайте), при этом браузер считывает первые несколько байтов содержимого, чтобы увидеть, соответствует ли он известному шаблону кодирования. Например, файл PNG всегда начинается с 8 байтов (печатаемых в шестнадцатеричном формате): 89 50 4E 47 0D 0A 1A 0A
.
Индивидуальные кодировки
Когда-нибудь вам может понадобиться компактно хранить целую кучу данных.Если ваш вариант использования достаточно конкретен, это может означать создание собственной кодировки.
Например, моя компания производит видеоигры. Наша последняя игра, Levelhead, позволяет игрокам создавать свои собственные уровни и делиться ими с другими игроками. Чтобы сделать эти уровни доступными для других игроков, нам нужно было хранить их в облаке и отправлять по HTTP. И поэтому мы хотели, чтобы эти файлы были как можно меньше, чтобы их можно было очень быстро загружать (отлично для игроков) и очень дешево хранить и отправлять (отлично для нас).
Чтобы сделать нашу собственную кодировку, нам нужно было решить, как представить все компоненты в игре с минимальным количеством битов. Мы дали каждому элементу уникальный индекс, который мы могли хранить как 16-битные или 32-битные целые числа, в зависимости от того, сколько элементов нам нужно представить. Мы могли бы сделать то же самое с координатами (x, y)
. Для элементов, которые имеют настраиваемые логические свойства (например, флажки), мы использовали битовые поля для хранения их настроек. И многое другое.
В конце концов, наша пользовательская кодировка была довольно сложной, но результат того стоил: средний уровень составляет менее килобайта!
О кодировании стоит подумать
Представление о проблемах данных как о проблемах кодирования может облегчить изучение языков программирования, анализ данных и решение проблем с хранением данных.
Двоичное кодирование- обзор
3.4.1 Пример конструкции конечного автомата
Чтобы проиллюстрировать конструкцию конечного автомата, рассмотрим проблему изобретения контроллера светофора на оживленном перекрестке в университетском городке. Студенты инженерного факультета мечутся между общежитиями и лабораториями на Академической авеню. Они заняты чтением автоматов в любимом учебнике и не ищут, куда идут. Футболисты суетятся между спортивными площадками и обеденным залом на бульваре Бравадо.Они кидают мяч взад и вперед и тоже не смотрят, куда идут. На пересечении этих двух дорог уже произошло несколько серьезных травм, и декан по делам студентов просит Бена Битдидла установить светофор до того, как погибнут.
Бен решает решить проблему с помощью конечного автомата. Он устанавливает два датчика движения: T A и T B на проспекте Академик и бульваре Бравадо, соответственно. Каждый датчик показывает ИСТИНА, если учащиеся присутствуют, и ЛОЖЬ, если улица пуста.Он также устанавливает два светофора, L A и L B , чтобы контролировать движение. Каждый световой сигнал получает цифровые входы, определяющие, должен ли он быть зеленым, желтым или красным. Следовательно, его конечный автомат имеет два входа, T A и T B , и два выхода, L A и L B . Перекресток с огнями и датчиками показан на рисунке 3.23. Бен предоставляет часы с 5-секундным периодом.На каждом такте часов (нарастающий фронт) свет может меняться в зависимости от датчиков движения. Он также предоставляет кнопку сброса, чтобы технические специалисты Physical Plant могли перевести контроллер в известное начальное состояние при его включении. На рис. 3.24 показан конечный автомат в виде черного ящика.
Рисунок 3.23. Карта кампуса
Рисунок 3.24. Вид «черного ящика» конечного автомата
Следующим шагом Бена будет набросок диаграммы переходов между состояниями , показанной на рис. 3.25, чтобы указать все возможные состояния системы и переходы между этими состояниями.Когда система перезагружается, на проспекте Академика светится зеленый свет, а на бульваре Бравадо - красный. Каждые 5 секунд контроллер проверяет структуру трафика и решает, что делать дальше. Пока на проспекте Академика есть движение, свет не меняется. Когда движение на Академическом проспекте прекращается, свет на Академическом проспекте становится желтым на 5 секунд, затем становится красным, а свет на бульваре Бравадо становится зеленым. Точно так же Bravado Blvd. свет остается зеленым, пока на бульваре есть движение, затем становится желтым, а затем красным.
Рисунок 3.25. Диаграмма переходов состояний
На диаграмме переходов состояний кружки представляют состояния, а дуги - переходы между состояниями. Переходы происходят по нарастающему фронту часов; мы не утруждаем себя отображением часов на схеме, потому что они всегда присутствуют в синхронной последовательной схеме. Более того, часы просто контролируют, когда должны происходить переходы, тогда как диаграмма показывает, какие переходы происходят. Дуга с надписью Reset, указывающая из космоса в состояние S0, указывает, что система должна войти в это состояние после сброса, независимо от того, в каком предыдущем состоянии она находилась.Если состояние имеет несколько выходящих дуг, дуги помечаются, чтобы показать, какой вход запускает каждый переход. Например, в состоянии S0 система останется в этом состоянии, если T A имеет значение ИСТИНА, и перейдет в S1, если T A имеет значение ЛОЖЬ. Если из состояния выходит одна дуга, этот переход всегда происходит независимо от входов. Например, в состоянии S1 система всегда будет переходить на S2. Значение, которое имеют выходы в определенном состоянии, указывается в состоянии.Например, в состоянии S2 L A красный, а L B зеленый.
Бен переписывает диаграмму переходов состояний как таблицу переходов состояний (таблица 3.1), которая указывает для каждого состояния и входа, каким должно быть следующее состояние, S '. Обратите внимание, что в таблице используются символы «безразлично» (X) всякий раз, когда следующее состояние не зависит от конкретного ввода. Также обратите внимание, что Reset не указан в таблице. Вместо этого мы используем сбрасываемые триггеры, которые всегда переходят в состояние S0 при сбросе, независимо от входов.
Таблица 3.1. Таблица переходов между состояниями
Текущее состояние S | Входы | Следующее состояние S ′ | |||
---|---|---|---|---|---|
T A | T84707 | T87 22 S0 | 0 | X | S1 | S0 | 1 | X | S0 | S1 | X | X 89 | S2 | S3 | S2 | X | 1 | S2 | S3 | X | X | S0 | |
{Диаграмма состояний перехода является абстрактной S1, S2, S3} и выходы, помеченные {красный, желтый, зеленый}.Чтобы построить реальную схему, состояниям и выходам необходимо присвоить двоичную кодировку . Бен выбирает простые кодировки, указанные в таблицах 3.2 и 3.3. Каждое состояние и каждый выход кодируются двумя битами: S 1: 0 , L A 1: 0 и L B 1: 0 .
Таблица 3.2. Кодирование состояния
Состояние | Кодирование S 1: 0 | ||||||
---|---|---|---|---|---|---|---|
S0 | 00 | ||||||
S1 | 01 89 | 11 |
Таблица 3.3. Кодировка выходного сигнала
Выходная | Кодировка L 1: 0 |
---|---|
зеленый | 00 |
желтый | 01 89 | красный |
Обратите внимание, что состояния обозначены как S0, S1 и т. Д. Версии с индексами, S 0 , S 1 и т. Д., Относятся к битам состояния.
Бен обновляет таблицу переходов состояний, чтобы использовать эти двоичные кодировки, как показано в таблице 3.4. Исправленная таблица переходов состояний - это таблица истинности, определяющая логику следующего состояния. Он определяет следующее состояние, S, ', как функцию текущего состояния, S, , и входов.
Таблица 3.4. Таблица переходов состояний с двоичными кодировками
Текущее состояние | Входы | Следующее состояние | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
S 1 | S 0 | 4 B | S'1 | S'0 | ||||||
0 | 0 | 0 | X | 0 | 1 | 0 | 0 | |||
0 | 1 | X | X | 1 | 0 | |||||
1 | 0 | X 89 0 89 | 0 89 | 0 1 | 0 | X | 1 | 1 | 0 | |
1 | 1 | X | X | 0 | 0 9 1089 |
Из этой таблицы легко считать булевы уравнения для следующего состояния в форме суммы произведений.
(3.1) S′1 = S¯1S0 + S1S¯0T¯B + S1S¯0TBS′0 = S¯1S¯0T¯A + S1S¯0T¯B
Уравнения можно упростить с помощью карт Карно, но часто проще делать это путем осмотра. Например, члены T B и T¯B в уравнении S'1 явно избыточны. Таким образом, S′1 сводится к операции XOR. Уравнение 3.2 дает упрощенное уравнение следующего состояния .
(3.2) S′1 = S1⊕S0S′0 = S¯1S¯0T¯A + S1S¯0T¯B
Аналогичным образом Бен записывает выходную таблицу (Таблица 3.5) с указанием для каждого состояния, каким должен быть выход в этом состоянии. Опять же, легко прочитать и упростить логические уравнения для выходных данных. Например, обратите внимание, что L A 1 имеет значение ИСТИНА только в тех строках, где S 1 имеет значение ИСТИНА.
Таблица 3.5. Таблица выходов
Текущее состояние | Выходы | |||||||
---|---|---|---|---|---|---|---|---|
S 1 | S 0 | L A | L A 9107 0 | L B 1 | L B 0 | |||
0 | 0 | 0 89 | 0 | 1 | 0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 | 0 | 0 | 89 0 | 1 | |
(3.3) LA1 = S1LA0 = S¯1S0LB1 = S¯1LB0 = S1S0
Наконец, Бен набрасывает свой конечный автомат Мура в виде рисунка 3.22 (a). Сначала он рисует 2-битный регистр состояния, как показано на рисунке 3.26 (a). На каждом фронте тактового сигнала регистр состояний копирует следующее состояние, S ' 1: 0 , чтобы стать состоянием S 1: 0 . Регистр состояний получает синхронный или асинхронный сброс для инициализации конечного автомата при запуске. Затем он рисует логику следующего состояния на основе уравнения 3.2, которая вычисляет следующее состояние из текущего состояния и входных данных, как показано на рисунке 3.26 (б). Наконец, он рисует логику вывода на основе уравнения 3.3, которая вычисляет выходные данные из текущего состояния, как показано на рисунке 3.26 (c).
Рисунок 3.26. Схема конечного автомата для контроллера светофора
На рис. 3.27 показана временная диаграмма, показывающая, что контроллер светофора проходит последовательность состояний. На схеме показаны CLK , сброс, входы T A и T B , следующее состояние S ', состояние S и выходы L A и L B .Стрелки указывают на причинно-следственную связь; например, изменение состояния вызывает изменение выходов, а изменение входов вызывает изменение следующего состояния. Пунктирными линиями показаны нарастающие фронты CLK при изменении состояния.
Рисунок 3.27. Временная диаграмма для контроллера светофора
Часы имеют 5-секундный период, поэтому светофоры меняются не чаще одного раза в 5 секунд. Когда конечный автомат включается впервые, его состояние неизвестно, что обозначено вопросительными знаками.Следовательно, систему следует перезагрузить, чтобы привести ее в известное состояние. На этой временной диаграмме S немедленно сбрасывается на S0, указывая, что используются асинхронно сбрасываемые триггеры. В состоянии S0 индикатор L A зеленый, а индикатор L B красный.
В этой схеме используются некоторые логические элементы И с пузырьками на входах. Они могут быть построены с вентилями И и входными инверторами, с вентилями ИЛИ-НЕ и инверторами для входов без пузырей или с какой-либо другой комбинацией вентилей.Оптимальный выбор зависит от конкретной технологии реализации.
В этом примере трафик прибывает сразу на Academic Ave. Таким образом, контроллер остается в состоянии S0, сохраняя L A зеленым, даже если трафик прибывает на Bravado Blvd. и начинает ждать. Через 15 секунд движение по проспекту Академика полностью прекращено, и T A падает. На следующем фронте тактового сигнала контроллер переходит в состояние S1, превращая L A в желтый.Еще через 5 секунд контроллер переходит в состояние S2, в котором L A становится красным, а L B становится зеленым. Контроллер ожидает в состоянии S2, пока весь трафик на Bravado Blvd. прошел. Затем он переходит в состояние S3, превращая L B в желтый. Через 5 секунд контроллер переходит в состояние S0, превращая L B в красный и L A в зеленый. Процесс повторяется.
Несмотря на все усилия Бена, ученики не обращают внимания на светофоры, и столкновения продолжают происходить.Затем декан студентов просит его и Алиссу спроектировать катапульту, чтобы бросать студентов инженерных специальностей прямо с крыш их общежитий через открытые окна лаборатории, минуя проблемный перекресток. Но это тема другого учебника.
Обработка текстовых файлов в Python 3 - документация Ника Коглана по Python Notes 1.0
Недавнее обсуждение списка рассылки python-ideas ясно показало, что мы (т.е. основные разработчики Python) должны предоставить более четкие инструкции по как обрабатывать задачи обработки текста, которые по умолчанию запускают исключения в Python 3, но ранее они были захвачены беспечным Python 2 предположение, что все файлы закодированы в «latin-1».
Вскоре у нас что-то будет в официальной документации, но это моя собственная предварительная попытка обобщить варианты обработки текста файлы и различные компромиссы между ними.
Возникает очевидный вопрос: что изменилось в Python 3, так что
подходы, которые разработчики использовали для обработки текста в Python 2, имеют
теперь начал бросать UnicodeDecodeError
и UnicodeEncodeError
в
Python 3.
Ключевое отличие состоит в том, что поведение обработки текста по умолчанию в Python 3
стремится обнаруживать проблемы с кодировкой текста как можно раньше - либо когда
чтение неправильно закодированного текста (обозначено UnicodeDecodeError
) или когда
вас просят написать последовательность текста, которая не может быть правильно представлена
в целевой кодировке (обозначенной UnicodeEncodeError
).
Это контрастирует с подходом Python 2, который допускал повреждение данных
проверки по умолчанию и строгую правильность нужно было запрашивать явно. Что
наверняка может быть удобным , когда обрабатываемые данные
преимущественно текст ASCII, и случайное повреждение данных было
вряд ли даже будет обнаружен, не говоря уже о том, чтобы вызвать проблемы, но вряд ли это
прочная основа для создания надежных многоязычных приложений (кому угодно
которому когда-либо приходилось отслеживать ошибочную UnicodeError
в Python 2, будет
знать).
Однако Python 3 действительно предоставляет ряд механизмов для ослабления значения по умолчанию. строгие проверки для обработки различных вариантов использования обработки текста (в в частности, варианты использования, в которых приемлема обработка «максимальных усилий», и строгие корректность не требуется). Эта статья призвана объяснить некоторые из них с помощью рассматривая случаи, в которых их было бы целесообразно использовать.
Обратите внимание, что многие из обсуждаемых ниже функций доступны в Python 2.
также, но вы должны явно получить к ним доступ через тип unicode
и модуль кодеков
.В Python 3 они являются частью поведения str
type и open
builtin.
Чтобы эффективно обрабатывать текст в Python 3, необходимо выучить хотя бы Крошечная информация о Unicode и кодировках текста:
- Python 3 всегда хранит текстовые строки как последовательности кодовых точек Unicode . Это значения в диапазоне 0-0x10FFFF. Они не всегда соответствуют непосредственно к символам, которые вы читаете на экране, но это различие не имеет значения для большинства задач по работе с текстом.
- Чтобы сохранить текст в виде двоичных данных, необходимо указать кодировку для этого текста.
- Процесс преобразования из последовательности байтов (т. Е. Двоичных данных) к последовательности кодовых точек (то есть текстовых данных) - это , декодирование , в то время как обратный процесс - это кодировка .
- По историческим причинам наиболее широко используемой кодировкой является
ascii
, которая может обрабатывать только кодовые точки Unicode в диапазоне 0-0x7F (т.е. ASCII - это 7-битная кодировка). - Существует большое количество кодировок , совместимых с ASCII , которые гарантируют, что любое появление допустимого значения ASCII в двоичных данных относится к соответствующий символ ASCII.
- «utf-8» становится предпочтительной кодировкой для многих приложений, так как это кодировка, совместимая с ASCII, которая может кодировать любую допустимую кодовую точку Unicode.
- «latin-1» - еще одна важная ASCII-совместимая кодировка, поскольку она отображает байты значения непосредственно к первым 256 кодовым точкам Unicode. (Обратите внимание, что Windows есть собственный вариант "latin-1" под названием cp1252, но, в отличие от ISO «Latin-1», реализованный кодеком Python с этим именем, Windows конкретный вариант не отображает все 256 возможных байтовых значений)
- Также широко используется множество несовместимых кодировок ASCII , особенно в азиатских странах (которым раньше приходилось разрабатывать собственные решения) рост Unicode) и на таких платформах, как Windows, Java и.Чистая среда CLR, где многие API принимают текст как данные в кодировке UTF-16.
- Вызов
locale.getpreferredencoding ()
сообщает кодировку, которую Python будет использоваться по умолчанию для большинства операций, требующих кодирования (например, чтение в текстовом файле без указанной кодировки). Это предназначено для способствовать взаимодействию между Python и операционной системой хоста, но может вызвать проблемы с взаимодействием между системами (если проблемы с кодированием не управляются последовательно). - Система
sys.getfilesystemencoding () вызов
сообщает кодировку, которую Python будет использоваться по умолчанию для большинства операций, требующих кодирования и включать текстовые метаданные в файловую систему (например, определение результатов изos.listdir ()
) - Если вы носитель английского языка, проживающий в англоязычной стране
(как и я!) Заманчиво подумать: «Но Python 2 работает нормально, почему вы
беспокоит меня всей этой ерундой Юникода? ». Стоит попытаться запомнить
что мы на самом деле меньшинство на этой планете и для большинства людей на Земле
ASCII и
latin-1
не могут обрабатывать даже свое имя , не говоря уже о любом другом текст, который они могут захотеть написать или обработать на своем родном языке.
Чтобы помочь стандартизировать различные методы работы с кодировкой Unicode и декодирования ошибок, Python включает концепцию обработчиков ошибок Unicode, которые автоматически вызываются всякий раз, когда в процессе встречается проблема кодирования или декодирования текста.
Я не собираюсь описывать их все в этой статье, но три из них особое значение:
-
strict
: это обработчик ошибок по умолчанию, который просто вызываетUnicodeDecodeError
для проблем с декодированием иUnicodeEncodeError
для проблемы с кодированием. -
surrogateescape
: это обработчик ошибок, который Python использует для большинства ОС, обращенные к API, чтобы изящно справляться с проблемами кодирования данных поставляется ОС. Он обрабатывает ошибки декодирования, отбирая данные в малоиспользуемой части пространства кодовых точек Unicode (для тех, кому интересно более подробно см. PEP 383). При кодировании переводит скрытые обратно в точную исходную последовательность байтов, которая не смогла декодировать правильно. Так же, как это полезно для API ОС, это может упростить для изящной обработки проблем с кодированием в других контекстах. -
backslashreplace
: это обработчик ошибок кодирования, который преобразует кодовые точки, которые не могут быть представлены в целевой кодировке для эквивалентная строка Python числовая escape-последовательность. Это позволяет легко убедитесь, чтоUnicodeEncodeError
никогда не будет сгенерирован, но не проиграет при этом теряется много информации (поскольку мы не хотим кодировать проблемы со скрытием вывода ошибок, этот обработчик ошибок включенsys.stderr
по умолчанию).
Одна альтернатива, которая всегда доступна, - это открывать файлы в двоичном режиме и обрабатывать их как байты, а не как текст.Это может сработать во многих случаях, особенно те, где маркеры ASCII встроены в действительно произвольные двоичные данные.
Однако как для «текстовых данных с неизвестной кодировкой», так и для «текстовых данных с известной
кодирование, но потенциально содержащее ошибки кодирования », часто
предпочтительно преобразовывать их в форму, которая может обрабатываться как текстовые строки. В
в частности, некоторые API-интерфейсы, которые принимают как байты, так и текст, могут быть очень строгими.
о кодировке байтов, которые они принимают (например, urllib.Модуль urlparse
принимает только чистые данные ASCII для обработки как
байтов, но с радостью обработает текстовые строки, содержащие не-ASCII
кодовые точки).
В этом разделе исследуется ряд вариантов использования, которые могут возникнуть при обработке текст. Кодирование текста - тема достаточно сложная, размер подходит всем - правильный ответ для конкретного приложения будет зависеть по таким факторам, как:
- насколько вы контролируете используемые текстовые кодировки
- , важнее ли избежать сбоя программы, чем избегать данных коррупция или наоборот
- , насколько распространены ошибки кодирования и нужно ли их устранять. обрабатываться изящно или просто отклоняться как недопустимый ввод
Файлы в кодировке, совместимой с ASCII, допустимы максимальные усилия
Пример использования: обрабатываемые файлы имеют кодировку, совместимую с ASCII, но вы не знаете, какой именно. Все файлы должны обрабатываться без запуск каких-либо исключений, но считается некоторый риск повреждения данных приемлемо (например, сопоставление файлов журналов из нескольких источников, где некоторые ошибки данных допустимы, если журналы остаются в основном нетронутыми).
Подход: используйте кодировку «latin-1» для отображения байтовых значений непосредственно в первые 256 кодовых точек Unicode. Это ближайший аналог Python 3 предлагает разрешительную модель обработки текста Python 2.
Пример: f = open (fname, encoding = "latin-1")
Примечание
Хотя кодировку Windows cp1252
также иногда называют
"Latin-1", он не отображает все возможные байтовые значения и, следовательно, требует
для использования в сочетании с обработчиком ошибок суррогатного кода .
убедитесь, что он никогда не выдает
UnicodeDecodeError
.Кодировка latin-1
в Python реализует ISO_8859-1: 1987, который отображает все возможные байтовые значения
до первых 256 кодовых точек Unicode, что гарантирует ошибки декодирования
никогда не произойдет, независимо от настроенного обработчика ошибок.
Последствия:
- данные будут , а не будут повреждены, если они просто считываются, обрабатываются как ASCII текст и снова записывается.
- никогда не вызовет UnicodeDecodeError при чтении данных
- по-прежнему будет вызывать UnicodeEncodeError, если кодовые точки выше 0xFF (например,грамм. умный
цитаты, скопированные из текстового редактора) добавляются к текстовой строке
прежде, чем он будет снова закодирован в байты. Чтобы предотвратить такие ошибки, используйте
обратная косая черта заменить обработчик ошибок
(или один из других обработчиков ошибок. который заменяет кодовые точки Unicode без представления в целевом объекте кодирование последовательностями кодовых точек ASCII). - повреждение данных может произойти, если исходные данные находятся в несовместимом формате ASCII. кодировка (например, UTF-16)
- повреждение может произойти, если данные записываются обратно с использованием другой кодировки.
чем
латинский-1
- может произойти, если изменяются элементы строки, отличные от ASCII.
напрямую (e.грамм. для кодировки переменной ширины, такой как UTF-8, которая была
вместо этого декодируется как
latin-1
, разрезая строку в произвольной точке может разбить многобайтовый символ на две части)
Файлы в кодировке, совместимой с ASCII, минимизируют риск повреждения данных
Пример использования: обрабатываемые файлы имеют кодировку, совместимую с ASCII, но вы не знаете, какой именно. Все файлы должны обрабатываться без запускать какие-либо исключения, но некоторые ошибки, связанные с Unicode, допустимы в чтобы снизить риск повреждения данных (например,грамм. сопоставление файлов журналов из несколько источников, но хотят более явного уведомления при сопоставлении данные подвержены риску повреждения из-за ошибок программирования, нарушающих предположение о записи данных обратно только в исходной кодировке)
Подход: используйте кодировку ascii
с ошибкой surrogateescape
обработчик.
Пример: f = open (fname, encoding = "ascii", errors = "surrogateescape")
Последствия:
- данные будут , а не будут повреждены, если они просто считываются, обрабатываются как ASCII текст и снова записывается.
- никогда не вызовет UnicodeDecodeError при чтении данных
- по-прежнему будет вызывать UnicodeEncodeError, если кодовые точки выше 0xFF (например, smart
цитаты, скопированные из текстового редактора) добавляются к текстовой строке
прежде, чем он будет снова закодирован в байты. Чтобы предотвратить такие ошибки, используйте
обратная косая черта заменить обработчик ошибок
(или один из других обработчиков ошибок. который заменяет кодовые точки Unicode без представления в целевом объекте кодирование последовательностями кодовых точек ASCII). - также вызовет UnicodeEncodeError, если будет сделана попытка кодирования текста.
строка, содержащая экранированные байтовые значения без включения
surrogateescape
обработчик ошибок (или даже более терпимый обработчик, напримеробратная косая черта заменить
). - некоторые библиотеки обработки Unicode, которые обеспечивают последовательность кодовых точек допустимый текст может жаловаться на используемый механизм экранирования (я не собираюсь чтобы объяснить, что здесь имеется в виду, но фраза «одинокий суррогат» является намеком что что-то в этом роде может происходить - тот факт, что «Суррогат» также появляется в названии обработчика ошибок, это не совпадение).
- повреждение данных все еще может произойти, если исходные данные находятся в ASCII несовместимая кодировка (например, UTF-16)
- повреждение данных также возможно, если экранированные части строка модифицируется напрямую
Файлы в типичной кодировке для конкретной платформы
Пример использования: файлы для обработки имеют согласованную кодировку, кодировку можно определить из сведений об ОС и локальных настроек, а также приемлемо отказаться от обработки файлов, которые не закодированы должным образом.
Подход: просто откройте файл в текстовом режиме. Этот вариант использования описывает поведение по умолчанию в Python 3.
Пример: f = open (fname)
Последствия:
-
UnicodeDecodeError
может быть выдан при чтении таких файлов (если данные не фактически в кодировке, возвращаемойlocale.getpreferredencoding ()
) -
UnicodeEncodeError
может быть выдан при записи таких файлов (при попытке выпишите кодовые точки, которые не представлены в целевой кодировке). - можно использовать обработчик ошибок
surrogateescape
, чтобы быть более терпимым к ошибки кодирования, если необходимо сделать все возможное, чтобы обработать файлы, содержащие такие ошибки, вместо того, чтобы сразу отклонять их как недействительные Вход.
Файлы в последовательной известной кодировке
Пример использования: файлы для обработки номинально находятся в согласованном кодирование, вы знаете точную кодировку заранее, и ее приемлемо отказываться обрабатывать файлы, которые не закодированы должным образом.Это становится более и более распространены, особенно со многими форматами текстовых файлов, начиная с стандартизируйте UTF-8 как предпочтительную кодировку текста.
Подход: открыть файл в текстовом режиме с соответствующей кодировкой
Пример: f = open (fname, encoding = "utf-8")
Последствия:
-
UnicodeDecodeError
может быть выдан при чтении таких файлов (если данные не собственно в указанной кодировке) -
UnicodeEncodeError
может быть выдан при записи таких файлов (при попытке выпишите кодовые точки, которые не представлены в целевой кодировке). - можно использовать обработчик ошибок
surrogateescape
, чтобы быть более терпимым к ошибки кодирования, если необходимо сделать все возможное, чтобы обработать файлы, содержащие такие ошибки, вместо того, чтобы сразу отклонять их как недействительные Вход.
Файлы с надежным маркером кодирования
Пример использования: файлы для обработки включают маркеры, указывающие номинальная кодировка (при отсутствии маркера предполагается кодировка по умолчанию) и приемлемо отказаться от обработки файлов, которые не закодированы должным образом.
Подход: сначала откройте файл в двоичном режиме, чтобы найти кодировку маркер, затем снова откройте в текстовом режиме с указанной кодировкой.
Пример: f = tokenize.open (fname)
использует маркеры кодирования PEP 263 для
определить кодировку исходных файлов Python (по умолчанию используется UTF-8, если нет
кодирующий маркер обнаружен)
Последствия:
- может обрабатывать файлы в разных кодировках
- может вызвать UnicodeDecodeError, если маркер кодировки неверен.
- должен гарантировать, что маркер установлен правильно при записи таких файлов
- , даже если это не кодировка по умолчанию, отдельные файлы все равно могут быть установить для использования UTF-8 в качестве кодировки, чтобы поддерживать кодировку почти все кодовые точки Unicode
- можно использовать обработчик ошибок
surrogateescape
, чтобы быть более терпимым к ошибки кодирования, если необходимо сделать все возможное, чтобы обработать файлы, содержащие такие ошибки, вместо того, чтобы сразу отклонять их как недействительные Вход.
Как работает кодирование Base64
Кодирование Base64 - это процесс преобразования двоичных данных в строковый формат ASCII путем преобразования этих двоичных данных в 6-битное символьное представление. Метод кодирования Base64 используется, когда двоичные данные, такие как изображения или видео, передаются по системам, которые предназначены для передачи данных в формате обычного текста (ASCII).
Почему используется кодировка Base64?
Необходимость кодирования Base64 возникает из-за проблем, возникающих при передаче мультимедиа в необработанном двоичном формате в текстовые системы.
Поскольку текстовые системы (например, электронная почта) интерпретируют двоичные данные как широкий диапазон символов, включая специальные командные символы, большая часть двоичных данных, которые передаются для передачи носителя, неверно интерпретируются этими системами и теряются или повреждаются в процессе передачи.
Вуттичай Люэмуанг / EyeEm / Getty ImagesОдин из методов кодирования таких двоичных данных, позволяющий избежать таких проблем с передачей, - это их отправка в виде простого текста ASCII в кодированном формате Base64.Это один из методов, используемых стандартом MIME для отправки данных, отличных от обычного текста.
Многие языки программирования, такие как PHP и Javascript, включают функции кодирования и декодирования Base64 для интерпретации данных, передаваемых с использованием кодировки Base64.
Логика кодирования Base64
Кодировка Base64 разбивает двоичные данные на 6-битные сегменты по 3 полных байта и представляет их как печатаемые символы в стандарте ASCII. По сути, это происходит в два этапа.6 = 64 символа), чтобы закодированные данные были доступны для печати и чтения человеком. Ни один из специальных символов, доступных в ASCII, не используется.
64 символа (отсюда и название Base64) - это 10 цифр, 26 символов в нижнем регистре, 26 символов в верхнем регистре, а также знак плюса (+) и косая черта (/). Существует также 65-й символ, известный как блокнот , , который является знаком равенства (=). Этот символ используется, когда последний сегмент двоичных данных не содержит полных 6 бит.
Пример кодировки Base64
Например, возьмите три числа ASCII 155, 162 и 233.Эти три числа составляют двоичный поток 100110111010001011101001. Двоичный файл, как и изображение, содержит двоичный поток, содержащий десятки или сотни тысяч нулей и единиц.
Кодер Base64 начинает с разделения двоичного потока на группы из шести символов: 100110 111010 001011 101001. Каждая из этих групп преобразуется в числа 38, 58, 11 и 41.
Шестизначный двоичный поток преобразуется между двоичными (или основанием 2) в десятичные символы (основание 10) путем возведения в квадрат каждого значения, представленного 1 в двоичной последовательности, с его позиционным квадратом.5 = 0 + 2 + 4 + 0 + 0 + 32.
Кодирование Base64 берет эту двоичную строку и разбивает ее на 6-битные значения 38, 58, 11 и 41.
Наконец, эти числа преобразуются в символы ASCII с использованием таблицы кодировки Base64. 6-битные значения этого примера преобразуются в последовательность ASCII m6Lp .
Используя таблицу преобразования Base64:
- 38 м
- 58 это 6
- 11 - L
- 41 р
Этот двухэтапный процесс применяется ко всей кодируемой двоичной строке.
Чтобы закодированные данные могли быть правильно напечатаны и не превышали лимит длины строки какого-либо почтового сервера, вставляются символы новой строки, чтобы длина строки не превышала 76 символов. Символы новой строки кодируются так же, как и все другие данные.
Вся цель кодирования Base64, от добавления заполнения для сохранения 3-байтовых двоичных сегментов до преобразования двоичного кода в текст с использованием таблицы Base64, состоит в том, чтобы сохранить целостность передаваемой двоичной информации.
Таблица кодировки Base64
В следующей таблице приведены все 64 символа, используемые в кодировке Base64.
Таблица кодировки Base64 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Значение | Char | Значение | Char | Значение | Char | Значение | Char | |||
0 | A | 16 | Q | 32 | г | 48 | Вт | |||
1 | B | 17 | R | 33 | ч | 49 | x | |||
2 | С | 18 | S | 34 | я | 50 | y | |||
3 | D | 19 | Т | 35 | к | 51 | z | |||
4 | E | 20 | U | 36 | к | 52 | 0 | |||
5 | Ф | 21 | В | 37 | л | 53 | 1 | |||
6 | G | 22 | Вт | 38 | м | 54 | 2 | |||
7 | H | 23 | Х | 39 | n | 55 | 3 | |||
8 | I | 24 | Y | 40 | или | 56 | 4 | |||
9 | Дж | 25 | Z | 41 | п. | 57 | 5 | |||
10 | К | 26 | a | 42 | q | 58 | 6 | |||
11 | L | 27 | б | 43 | r | 59 | 7 | |||
12 | M | 28 | c | 44 | с | 60 | 8 | |||
13 | N | 29 | д | 45 | т | 61 | 9 | |||
14 | O | 30 | и | 46 | u | 62 | + | |||
15 | П | 31 | f | 47 | v | 63 | / |
Решение эндшпиля
В конце процесса кодирования может возникнуть проблема.Если размер исходных данных в байтах кратен трем, все работает нормально. В противном случае могут быть пустые байты. Для правильного кодирования необходимо ровно 3 байта двоичных данных.
Решение состоит в том, чтобы добавить достаточно байтов со значением 0 для создания 3-байтовой группы. Два таких значения добавляются, если для данных требуется один дополнительный байт данных, одно добавляется для двух дополнительных байтов.
Конечно, эти искусственные завершающие "0" нельзя закодировать с помощью приведенной ниже таблицы кодирования.Они должны быть представлены 65-м символом. Символ заполнения Base64 представляет собой знак равенства (=) и помещается в конец закодированных данных.
Спасибо, что сообщили нам!
Расскажите, почему!
Другой Недостаточно подробностей Трудно понять .