Метод encode(), позволяет закодировать юникодовый литерал в строчный, явно указав необходимую кодировку. Определенные шаги, которые мы будем совершать с кодировками в Python, будут актуальны для Windows и неактуальны для других систем, и наоборот. Кстати, вы могли заметить, что почти всегда, курказябрами становится русский, украинский, одним словом текст, который состоит не из латинских английских букв и символов.
В Кодировке Cp866 Каждый Символ Кодируется
Кодовые точки Unicode и русские символы в исходных кодах и программах Java . JDK 1.6.
Фактически, Unicode содержит необычный подход к пониманию понятия символ. До сих пор мы предполагали, что символы отображаются на набор каких-то битов, которые вы можете хранить на диске или в памяти:
Каждой платоновой букве в каждом алфавите консорциумом Unicode было назначено волшебное число, которое записывается так, как это: U+0645. Это волшебное число называют кодовой точкой. U+ означает » Unicode «, а числа являются шестнадцатеричными. Число U+FEC9 является арабской буквой Аин ( Ain ). Английская буква A соответствует U+0041.
В действительности нет никакого предела для количества букв, которые могут определяться через Unicode , и на самом деле они уже перешагнули за пределы 65,536, так что не каждая буква из Unicode может действительно сжиматься в два байта.
Для кириллицы в UNICODE отведен диапазон кодов от 0x0400 до 0x04FF. В данной таблице приведена лишь часть знаков этого диапазона, однако стандартом определено большинство кодов этого диапазона.
которая , в Unicode , соответствует этим семи кодовым точкам:
Всего лишь набор кодовых точек. Числа в действительности.
Чтобы узнать, как будет выглядеть текстовый файл в формате Unicode , можно запустить программу notepad в Windows , вставить данную строку и при сохранении текстового файла выбрать кодировку Unicode .
Программа предлагает сохранение в трех разновидностях кодировок Unicode . Первый вариант представляет собой способ записи с младшим байтом впереди ( little endian ), второй со старшим байтом впереди ( big endian ). Какой из вариантов является правильным?
Вот как выглядит дамп файла со строкой “ Привет! ”, сохраненный в формате Unicode ( big endian ):
А так выглядит дамп файла со строкой “ Привет! ”, сохраненный в формате Unicode ( little endian ):
А так выглядит дамп файла со строкой “ Привет! ”, сохраненный в формате Unicode ( UTF -8):
В стандарте Unicode написано, что порядок байт по умолчанию является либо big endian , либо little endian . Действительно, оба порядка являются правильным, и разработчики систем сами выбирают себе один из них. Не стоит беспокоиться, если ваша система обменивается данными с другой системой и обе используют little endian .
Однако , если ваша Windows обменивается данными с UNIX-сервером, который использует big endian , одна из систем должна осуществлять перекодировку. В этом случае стандарт Unicode гласит, что можно выбрать любой из следующих способов решения проблемы:
Что такое кодировки | Hexlet Guides
12. Определите объём видеопамяти, необходимый для хранения изображения 1024х768 пикселей с палитрой 16 777 216 цветов. Основным достоинством CP866 было сохранение символов псевдографики на тех же местах, что и в Extended ASCII; поэтому могли без изменений работать зарубежные текстовые программы, например, знаменитый Norton Commander. В итоге сейчас для кириллицы имеем две кодировки cp866 старая досовская кодировка и cp1251 она же windows-1251 новая, от Windows.
Самый простой (и самый неудобный) способ
Работать в «родной» для консоли кодовой странице, в cp866. Т.е. все строки с кириллицей в исходном коде программы должны быть написаны в кодировке cp866. В этой же кодировке должны быть все входные файлы для программы. И в этой же кодировке будут и все выходные файлы. Полное впечатление, что мы вернулись на 20 лет назад, в MS DOS.
Способ подходит, если необходим только вывод кириллицы на консоль, и вы работаете под Windows 7. Под Windows XP это не работает (прим. редактора — все работает).
Функция setlocale() устанавливает или изменяет для текущей программы информацию о национальной специфике (то, что задается в апплете Region and Language в Control panel). Описание функции можно найти в MSDN.
Здесь используется, что символ LC_ALL равен 0 и подразумевается, что в операционной системе установлена страна пребывания Россия (локализация самой Винды роли не играет). Но лучше все-таки использовать полную форму.
Функция достаточно капризная. Это касается второго параметра. Некоторые значения, которые указаны в документации, могут на каких-то системах (компиляторах?) не работать.
В Кодировке Cp866 Каждый Символ Кодируется
Ввод и вывод на консоль
Для корректного ввода и вывода кириллицы на консоль надо использовать пару функций: SetConsoleOutputCP() и SetConsoleCP() . Описания в MSDN здесь и здесь соответственно.
В качестве единственного параметра обеим функциям передается номер кодовой страницы. В нашем случае (кириллица) — это 1251.
Этот способ работает и для Windows XP, и для Windows 7. Опробовано с Dev-C++ 5.6.3 (компилятор TDM-GCC 4.8.1 и MS Visual Studio 2012.
Следующая тестовая программа демонстрирует вывод кириллицы на консоль, ввод кириллической строки с консоли, контрольный вывод введенной строки, сравнение введенной строки с эталонной и вывод введенной строки в файл.
Эта программа также удобна для экспериментов с различными кодовыми таблицами и их сочетаниями.
Здесь я намеренно оставил закомментированный вызов setlocale(LC_ALL, «Russian»); . На ввод-вывод кириллицы он уже не влияет, но может потребоваться для других национальных настроек (разделитель дробной части числа, формат даты, времени и пр.)
Свои кодировки необходимы и для других стран с уникальным набором символов. Это приводило к путанице и сложностям в обмене информацией. Ниже приведён пример текста, который написали в кодировке KOI8-R, а читают в cp851. расчета заработной платы сотрудников например, компьютер LEO применялся для нужд компании, владеющей сетью чайных магазинов ;. Чтобы узнать, как будет выглядеть текстовый файл в формате Unicode , можно запустить программу notepad в Windows , вставить данную строку и при сохранении текстового файла выбрать кодировку Unicode.
Примеры решения задач
1. С помощью кодировки Unicode закодирована следующая фраза: Я хочу поступить в университет!
Оцените информационный объем этой фразы.
Решение:
В данной фразе содержится 31 символ (включая пробелы и знак препинания). Поскольку в кодировке Unicode каждому символу отводится 2 байта памяти, для всей фразы понадобится 31*2 = 62 байта или 31*2*8 = 496 битов.
2. Статья, набранная на компьютере, содержит 8 страниц, на каждой странице 40 строк, в каждой строке 64 символа. В одном из представлений Unicode каждый символ кодируется 16 битами. Определите информационный объем статьи в этом варианте Unicode. Выберите верный ответ из предложенных: а) 320 байт, б) 35 Кбайт , в) 640 байт, г) 40 Кбайт.
Определим количество символов: 8*40*64 = 20480. Поскольку в кодировке Unicode каждому символу отводится 16 битов памяти, для всей фразы понадобится 20480*16 = 327680 битов.
ASCII как первый стандарт кодирования информации
- коды управляющих символов,
- коды цифр, арифметических операций, знаков препинания,
- некоторые специальные символы,
- коды больших и маленьких латинских букв.
- коды букв национального алфавита,
- коды некоторых математических символов,
- коды символов псевдографики.
Содержание: