Что такое кодировка unicode информатика: Кодировка Unicode — задание. Информатика, 7 класс.

Содержание

Юникод. UTF-8

<<Назад  |  Содержание  |  Далее>>

 

 

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

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

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

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

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

Cyrillic (#0400 — #04FF)

Cyrillic Supplement (#0500 — #052F).

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

Поэтому сейчас на практике больше распространено представление Юникода UTF-8 (Unicode Transformation Format). UTF-8 обеспечивает наилучшую совместимость с системами, использующими 8-битные символы. Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст ASCII.

Остальные символы Юникода изображаются последовательностями длиной от 2 до 4 байтов. В целом, так как самые распространенные в мире символы – символы латинского алфавита — в UTF-8 по-прежнему занимают 1 байт, такое кодирование экономичнее, чем чистый Юникод.

 

 

<<Назад  |  Содержание  |  Далее>>

Кодирование чисел. Кодирование символов (ASCII, UNICODE)

Тема урока:

«12 16 5 10 18 16 3 1 15 10 6

10 15 22 16 18 14 1 24 10 10″

Кодировочная таблица

А -1

Б -2

Ж -8

З -9

В -3

Н -15

И -10

О -16

Г -4

Ф -22

П -17

Й -11

Д -5

Ы -29

Х -23

К -12

Е -6

Р -18

Ь -30

Ц -24

Ё -7

Л -13

С -19

Э -31

Ч -25

М -14

Т -20

Щ -26

Ю -32

У -21

Я -33

Ш -27

Ъ -28

 

 

«12 16 5 10 18 16 3 1 15 10 6

10 15 22 16 18 14 1 24 10 10″

«Кодирование

информации»

ВОПРОСЫ:

1. В чем различия этих кодировочных систем?

2.Как вы думаете, существуют ли другие технологии кодирования? Какие?

1. В кодировке Unicode на каждый символ отводится 2 байта. Определите

информационный объем слова из двадцати четырех символов в этой кодировке. Ответ записать в битах.

 

2. Скорость передачи данных через модемное соединение 28 Кбит/сек. Передача текстового файла заняла 10 с. Определите сколько символов содержал переданный текст, если известно, что он был представлен в кодировке  Unicode( на 1 символ отводится 16 бит).

 

3. Автоматическое устройство осуществило перекодировку информационного сообщения на русском языке, первоначально записанного в 16-битном коде Unicode, в 8-битную кодировку КОИ-8. При этом информационное сообщение уменьшилось на 480 бит. Какова длина сообщения в символах?

В кодировке Unicode на каждый символ отводится 2 байта. Определите

информационный объем слова из двадцати четырех символов в этой кодировке. Ответ записать в битах.

( Решение . Объем равен 24*2байта = 48 байт = 48* 8 бит = 384 бита)

 

Скорость передачи данных через модемное соединение 28 Кбит/сек. Передача текстового файла заняла 10 с. Определите сколько символов содержал переданный текст, если известно, что он был представлен в кодировке  Unicode( на 1 символ отводится 16 бит).

(Решение: 1 Кбит — 1024 бит, поэтому за 1 сек будет передано 28*1024=28672 бита, за 10 секунд — 28672* 10 =286720. Так как переданный текст представлен в кодировке Unicode, то на 1 символ отводится 16 бит, поэтому количество символов 286720: 16 =17920 символов)

 

Автоматическое устройство осуществило перекодировку информационного сообщения на русском языке, первоначально записанного в 16-битном коде Unicode, в 8-битную кодировку КОИ-8. При этом информационное сообщение уменьшилось на 480 бит. Какова длина сообщения в символах?

ешение. Количество символов в сообщении n. Значит в 16-битном коде — Unicode объём будет равен 16*n бит, а в 8-битной кодировке КОИ-8 8*n бит. Получим уравнение из условия задачи 16*n = 8*n + 480, 8*n = 480, n = 60. Длина сообщения будет состоять из 60 символов.)

КРИТЕРИИ ОЦЕНИВАНИЯ

3 ЗАДАНИЯ «ОТЛИЧНО»

2 ЗАДАНИЯ «ХОРОШО»

1 ЗАДАНИЕ

«УДОВЛЕТВОРИТЕЛЬНО»

Домашнее задание

Прочитать параграф учебника 10.

Подготовить сообщение.

У вас имеется большое количество фото с цифрового фотоаппарата, которые нужно отправить по почте, что вы предпримете?

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

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

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

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

UTF-8 изнутри

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

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

Остальные байты, кроме первого, всегда идут с началом ’10’ и потом 6 битов следующей части Unicode символа.

Пример

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

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

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

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

Заключение

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

Кодирование информации

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

Как в памяти компьютера хранятся символы (буквы)?

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

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

Однако алфавитов в мире очень много (английский, русский, китайский и др.). Поэтому следующий вопрос:

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

Для ответа на этот вопрос пойдем историческим путем.

В 60-х годах XX века в американском национальном институте стандартизации (ANSI) была разработана таблица кодирования символов, которая впоследствии была использована во всех операционных системах. Эта таблица называется ASCII (American Standard Code for Information Interchange – американский стандартный код для обмена информацией) . Чуть позже появилась расширенная версия ASCII .

В соответствие с таблицей кодирования ASCII для представления одного символа выделяется 1 байт (8 бит). Набор из 8 ячеек может принять 2 8 = 256 различных значений. Первые 128 значений (от 0 до 127) постоянны и формируют так называемую основную часть таблицы, куда входят десятичные цифры, буквы латинского алфавита (заглавные и строчные), знаки препинания (точка, запятая, скобки и др.), а также пробел и различные служебные символы (табуляция, перевод строки и др.). Значения от 128 до 255 формируют дополнительную часть таблицы, где принято кодировать символы национальных алфавитов.

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

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

Третья проблема — что делать, если в тексте используется несколько языков (например, русский, английский и французский)? Нельзя же использовать две таблицы сразу …

Чтобы решить эти проблемы одним разом была разработана кодировка Unicode.

Стандарт кодирования символов Unicode

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

В Unicode для кодирования символов предоставляется 31 бит (4 байта за вычетом одного бита). Количество возможных комбинаций дает запредельное число: 2 31 = 2 147 483 684 (т.е. более двух миллиардов). Поэтому Unicode описывает алфавиты всех известных языков, даже «мертвых» и выдуманных, включает многие математические и иные специальные символы. Однако информационная емкость 31-битового Unicode все равно остается слишком большой. Поэтому чаще используется сокращенная 16-битовая версия (2 16 = 65 536 значений), где кодируются все современные алфавиты.

В Unicode первые 128 кодов совпадают с таблицей ASCII.

Unicode (Юникод) — это стандарт кодирования символов, где каждому символу присваивается свой уникальный код, независимо от программной и аппаратной платформы.

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

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

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

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

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

Вторая проблема — шрифт, создается под определенную кодовую таблицу символов. Некоторые таблицы символов могут совпадать, более чем на 90%. Становиться не выгодно хранить разные шрифты, для (почти) одинаковых кодировок. Можно создавать универсальные шрифты. Но тогда потребуется хранить дополнительные данные, которые помогут разобраться, какие символы шрифта, каким символам кодировки соответствуют.

В начале 80-х кризис «крокозябры», в текстах, достиг своего пика. Необходимость в универсальной кодовой таблице стала очевидной. Нужен единый стандарт. Где поместились бы все символы. И в 1991 году такой стандарт был принят, консорциумомЮникод. Под названием Unicode. В консорциум вошли ведущие IT-предприятия, которые и определили, какой должна быть единая кодировка.

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

Сколько нужно бит, для нового стандарта Unicode? 8 бит даст 256 значений для символов (2 8 = 256). Практика доказала, это мало. 32 бита даст (2 32 = 2 294 967 296) позиций для символов. Это много. Слишком, не эффективное использование машинной памяти. Оптимальным вариантом, это взять 16 бит (2 16 = 65536). Таким образом первая версия Unicode была фиксированной шириной 16 бит. В нее вошли не все символы, а только самые употребляемые, содержавшиеся ране в известных кодировках. Например, в Unicode не попали, редко используемые китайские иероглифы. И не которые символы из высшей математики.

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

Последние версии Unicode были сильно изменены. И первое, что решили, это хранить все существующие символы в данной кодировке. Символы в Unicode стали переменной длинны. Кодовую таблицу разбили на два пространства. В первом, хранят все наиболее употребляемые символы. Это в диапазоне от 0 до 65535. Остальное пространство используется для редко употребляемых символов. Любой символ можно представить несколькими кодами. Поэтому существующую таблицу Unicode постоянно нормализируют и выпускают новые версии. Современный Unicode поддерживает письменность слева направо так и на оборот справа налево, арабские символы. Он даже позволяет создавать двунаправленные тексты. Т.е в тексте, относящейся к одной кодовой таблице, могут содержаться символы, пишущиеся как справа налево так и наоборот. Но эту возможность должны поддерживать и аппаратные устройства.

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

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

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

Традиционно для кодирования одного символа используется количество информации, равное 1 байту , то есть I = 1 байт = 8 битов.

Для кодирования одного символа требуется 1 байт информации. Если рассматривать символы как возможные события, то можно вычислить, какое количество различных символов можно закодировать: N = 2I = 28 = 256.

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

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

Пользователь нажимает на клавиатуре клавишу с символом, и в компьютер поступает определенная последовательность из восьми электрических импульсов (двоичный код символа). Код символа хранится в оперативной памяти компьютера, где занимает один байт. В процессе вывода символа на экран компьютера производится обратный процесс — декодирование, то есть преобразование кода символа в его изображение. В качестве международного стандарта принята кодовая таблица ASCII (American Standart Code for Information Interchange) Таблица стандартной части ASCII Важно, что присвоение символу конкретного кода — это вопрос соглашения, которое фиксируется в кодовой таблице. Первые 33 кода (с 0 по 32) соответствуют не символам, а операциям (перевод строки, ввод пробела и так далее). Коды с 33 по 127 являются интернациональными и соответствуют символам латинского алфавита, цифрам, знакам арифметических операций и знакам препинания. Коды с 128 по 255 являются национальными, то есть в национальных кодировках одному и тому же коду соответствуют различные символы.

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

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

Юникод — появление универсальной кодировки текста (UTF 32, UTF 16 и UTF 8)

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

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

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

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

В результате развития универсальной кодировки Юникод появилась UTF 16 , которая получилась настолько удачной, что была принята по умолчанию как базовое пространство для всех символов, которые у нас используются. UTF 16 использует два байта для кодирования одного символа. Например, в операционной системе Windows вы можете пройти по пути Пуск — Программы — Стандартные — Служебные — Таблица символов.

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

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

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

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

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

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

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

Конспект урока по теме «Кодирование текстовой информации».

Тип урока: урок ознакомления с новым материалом

Цель:

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

  • воспитательная: формирование навыков работы в коллективе, толерантности.

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

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

Базовый учебник: Информатика и ИКТ. Базовый уровень: учебник для 10 класса / Н.Д. Угринович. — М.: Бином. Лаборатория знаний, 2011.

Вспомогательный материал:

1. Словарь компьютерных терминов.

2. Электронный ресурс: справочник кодировок текста http:// foxtools.ru.

3. ЭОР: http://learningapps.org — Информатика – Кодирование — Юникод.

4. ЭОР: http://school-collection.edu.ru/ — «Практикум по решению задач в курсе информатики. Модуль 1. Информация и информационные процессы» — Задачи для самостоятельного решения — задачи 2,8.

Используемое оборудование: проектор, ПК.

Приветствует учащихся.

(слайд 1)

Приветствуют учителя. Садятся.

Анализ результатов контроля знаний,

Анализирует результаты зачета по теме «Информация и информационные процессы»

Слушают учителя. Анализируют результаты проверки.

умений и навыков

Сообщение темы, цели задач урока и мотивация учебной деятельности;

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

(слайд 1)

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

(слайд 2)

Давайте вспомним, с какими видами информации работает компьютер? (текстовая, аудио, графическая и видео)

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

Сегодня мы будем говорить о кодировании текстовой информации.

(слайд 3)

Откройте тетради. Запишите тему урока.

(слайд 4)

Исходя из темы урока, какую цель мы сегодня можем поставить?

Цель: повторение принципа (как?) процесса кодирования текстовой информации и изучение особенностей кодировании текстовой информации и выработка умения применять знания о кодировании текстовой информации на практике

(слайд 5,6,7,8)

Для того, чтобы достичь цель урока, что мы должны будем сделать? На какие вопросы ответить?

Задачи:

  • Повторить, как происходит процесс кодирования?

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

  • Изучить, какие бывают кодировки текстовой информации и в чем их особенности?

Слушают учителя

Отвечают на вопросы фронтально

Открывают тетради, записывают тему урока.

Ставят цель урока, формулируют задачи, используя подсказки на доске (на слайде)

Подготовка к изучению нового материала через повторение и актуализацию опорных знаний;

ознакомление с новым материалом;

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

(слайд 9,10)

Ситуация 1.

Давайте рассмотрим забавный случай под названием «Таинственные знаки», который рассказал Я. И. Перельман в своей книге «Занимательная арифметика».

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

Я. И. Перельман распутал секрет этих знаков, после чего поместил в газете следующую заметку:

«В связи с таинственными знаками, появившимися на стенах многих Петроградских домов, небесполезно разъяснить смысл одной категории подобных знаков, которые, несмотря на зловещее начертание, имеют самое невинное значение. Я говорю о знаках такого типа:

+|| ++|||| +++|||

(слайд 11,12)

Что означают данные знаки?

Подобные знаки замечены во многих домах на черных лестницах у дверей квартир. Обычно, знаки этого типа имеются у всех входных дверей данного дома, причем в пределах одного дома двух одинаковых знаков не наблюдается. Их мрачное начертание естественно внушает тревогу жильцам. Между тем, смысл легко раскрывается, если сопоставить их с номерами соответствующих квартир. Так, например, приведенные выше знаки найдены мной у квартир №12, №24 и №33:

+|| ++|||| +++|||

12 24 33

(слайд 13)

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

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

(слайд 14)

Зачем? Чтобы представить информацию в понятной форме.

(слайд 15,16)

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

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

(слайд 17)

Какую проблему нам обозначает ситуация 1? Проблема 1: неизвестны новые знаки, нет правила их

использования или таблицы соответствия знаков.

(слайд 18)

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

(слайд 19)

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

(слайд 20)

Сделайте записи в тетради: схема человек (образ символа) — кодовая таблица- компьютер (двоичный код)

(слайд 21)

Вывод: при наличии кодовой таблицы проблема 1 решена.

(слайд 22)

Ситуация 2. Получаете электронное письмо, но не можете его прочитать – вместо текста идут какие-то непонятные знаки? Открываете страницу в Интернете, а разобрать ничего не возможно.

(слайд 23,24)

Какую проблему обозначает ситуация 2?Проблема 2: открытие файла в неверной кодировке.

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

(слайд 25)

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

Какие кодировки текстовой информации существуют? Какие вы помните?

(слайд 26-30)

Кодировка ASCII (American Standard Code for Information Interchange) — американская стандартная кодировочная таблица. Использует для кодирования: 1 символ = 1 байт.

Сколько знаков можно закодировать с помощью 1 байта?

28=256

Таблица символов ASCII состоит из двух частей. Первая часть таблицы ASCII-кодов (от 0 до 127) стандартна для всех компьютеров и содержит:

  • коды управляющих символов,

  • коды цифр, арифметических операций, знаков препинания,

  • некоторые специальные символы,

  • коды больших и маленьких латинских букв.

Вторая часть таблицы (коды от 128 до 255) бывает различной в различных компьютерах. Она содержит:

  • коды букв национального алфавита,

  • коды некоторых математических символов,

  • коды символов псевдографики.

(слайд 29)

Запишите в тетради:

Делают записи в тетради.

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

Стандарты кодировок текстовой информации:

1) ASCII (1 байт)

А) интернациональные символы

Б) национальные символы

(слайд 31)

В Советском Союзе различные организации и сети, имевшие большое влияние на компьютерный и программный рынок тех времен, создавали свои кодировки (т.е. вторые половины таблицы), содержащие русские символы. Крупным компаниям было удобно и выгодно использовать свою кодировку в своих собственных программных продуктах. Никто и не думал приходить к какому-то общему стандарту. Так возникло большое количество русских кодировок: КОИ-8, ISO, Mac, CP1251, CP866.

(слайд 32-36)

Откройте словарь терминов в учебнике и оформите таблицу в тетради самостоятельно.

Кодовый стандарт

Операционная система

Примечания

CP866

MS-DOS

используется в операционной системе MS DOS или сеансе работы MS DOS

КОИ-8

UNIX (Linux)

позиции кириллических символов соответствуют их фонетическим аналогам в английском алфавите

CP1251

WINDOWS

стандартная кодировка для всех русских версий Microsoft Windows, отсутствует псевдографика

CP10007

MAC

Отсутствует псевдографика и «верхние» управляющие символы

ISO

UNIX

стандарт кодирования кириллицы, для кодирования веб-страниц

(слайд 37)

Ситуация 3.

Однако так сложилось, что различные кодировки были изобретены независимо:

1. располагали буквы, стремясь к соответствию расположения на пишущих машинках,

2. одинаково выглядящие кириллические и латинские буквы находились на расстоянии в 128.

3. появление Windows также принесло свою кодировку.

(слайд 38,39)

Какую проблему обозначает ситуация 3? Проблема 3: нет универсальности в применении кодовых таблиц кириллицы.

Есть ли такая проблема у английских букв? Ответ: нет, первая часть таблицы универсальна!

Рассмотрим проблему 3 на конкретном примере.

(слайд 40)

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

(слайд 41,42)

Unicode — стандарт кодирования символов, позволяющий представить знаки почти всех письменных языков.

Использует для кодирования: 1 символ = 2 байта

Сколько знаков можно закодировать с помощью 2 байтов? N=2I, I=2 байта=16 бит, 216=65536

(слайд 43,44)

Продолжите записи в тетради:

2. Unicode (2 байта)

(слайд 45)

Подведем итог.

Проблема 2: открытие файла в неверной кодировке.

Проблема 3: нет универсальности в применении кодовых таблиц кириллицы.

Пришли ли мы к решению данных проблем? Ответ: да.

(слайд 46)

Итак, давайте вернемся к нашим задачам:

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

Какие элементы необходимы для успешного процесса кодирования?

Какие бывают кодировки?

Где и как используются на практике?

(слайд 47)

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

Первичное осмысление и закрепление связей и отношений в объектах изучения;

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

Откройте тетради для контрольных и практических работ, подпишите практическая работа «Кодирование текстовой информации».

Инструктаж. Критерии выставления оценок.

(слайд 48)

Критерии оценивания:

Практическая работа содержит 3 задания.

1,2 задание – отметка «3»

1, 2 , задача 1 – отметка «4»

1, 2 , задача 2 – отметка «5»

(слайд 49,50)

Задание 1. Файл zadanie_2.txt открывается в неверной кодировке. Используя кодировочный стандарт ASCII, определить название кодировочной таблицы, с помощью которой написан файл. Оформить в табличном виде в тетради.

DE

ED

E8

EA

EE

E4

Для работы с кодировочным стандартом ASCII используйте ресурсы Интернет:

http://foxtools.ru/ (Справочники-ASCII-CP1251)

Задание 2. Открыть файл zadanie _ 2.txt с помощью браузера. Используя

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

команду [Вид — Кодировка] раскодировать сообщение, выбрав нужную кодировку.

(слайд 52)

Задание 3. Решить задачу.

Задача 1. Свободный объем оперативной памяти 640 Кб. Поместиться ли статья, набранная на компьютере, которая содержит 8 страниц, на каждой странице 40 строк, в каждой строке 64 символа в оперативной памяти компьютера? Каждый символ кодируется 16 битами (Unicode).

Задача 2. Пользователь активировал перезагрузку компьютера для обновления баз антивирусной программы через 1 минуту и запустил печать документа на лазерный принтер Canon LBP, который печатает со скоростью в среднем 6,3 Кбит в секунду. Документ содержит 8 страниц, на одной странице в среднем 45 строк ,в строке 70 символов и каждый символ кодируется 1 байтом. Успеет ли принтер произвести печать документа?

Первичный контроль знаний, умений и навыков

(слайд 53-56)

Проведите проверку выполнения заданий своего соседа и оцените его (ее) деятельность по 5-бальной

системе.

Предъявляют сделанные задания, получают отметки.

Подведение итогов урока.

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

(слайд 57,58)

Решены ли задачи урока? С помощью чего?

Задачи:

  • Повторить, как происходит процесс кодирования?

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

  • Изучить, какие бывают кодировки текстовой информации и в чем их особенности?

Достигнута ли цель урока?

Подводят итог урока. Заполняют карточки рефлексии.

Цель: повторение принципа (как?) процесса кодирования текстовой информации и изучение особенностей кодировании текстовой информации и выработка умения применять знания о кодировании текстовой информации на практике

(слайд 59)

Заполните карточки: подчеркните фразы, характеризующие вашу работу на уроке.

Я на уроке

Итог

Работал в полную силу

Понял весь материал

Работал не в полную силу

Узнал больше, чем знал

Помогал другим

Остались пробелы в знаниях

Вложите карточки в ваши практические тетради.

Постановка задания на дом;

Задает домашнее задание с использованием ресурсов Интернета.

(слайд 60)

Запишите домашнее задание

пункт учебника 1.1.1

Электронные ресурсы к уроку

1. http://learningapps.org

Ресурс: Информатика – Кодирование — Юникод

Дополнительно:

2. http://school-collection.edu.ru/

Ресурс: «Практикум по решению задач в курсе информатики. Модуль 1. Информация и информационные процессы» — Задачи для самостоятельного решения — задачи 2,8.

Записывают домашнее задание.

Организационный момент

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

(слайд 61,62)

Где раньше мы сталкивались с темой сегодняшнего урока на практике? Ответ: при создании web – страниц.

Уходят.

Урок окончен.

Список использованных печатных источников

1. Информатика и ИКТ. Базовый уровень: учебник для 10 класса / Н.Д. Угринович. — М.: Бином. Лаборатория знаний, 2011.

2. Информатика и информационные технологии. Учебник для 10-11 классов / Н.Д. Угринович. — М.: БИНОМ. Лаборатория знаний, 2005

Активные ссылки на страницы материалов в Интернете

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

http://foxtools.ru/ASCII#1251

http://foxtools.ru/Unicode

2. ЭОР: Информатика – Кодирование информации — Юникод

http://learningapps.org/341724

3. ЭОР:»Практикум по решению задач в курсе информатики. Модуль 1. Информация и информационные процессы» — Задачи для самостоятельного решения — задачи 2,8

http://files.school-collection.edu.ru/dlrstore/2b16b6c9-4e71-e40d-71a3-75003233946c/modul_1.doc

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

http://inn.h2.ru/topic.shtml?h2=16&h3=7

5. Что такое кодировка

http://www.infospir.ru/articles/chto_takoe_kodirovka_2.php

Активные ссылки на использованные изображения

1. Изображения кодировки ASCII

http://foxtools.ru/ASCII#1251

2. Изображение кодировки Unicode

http://foxtools.ru/Unicode

3. Изображения кодировок

CP866

http://czyborra.com/charsets/codepages.html

КОИ-8

http://www.fgroupsoft.net/informatika/informatika_23.html

CP1251

http://czyborra.com/charsets/codepages.html

Информатика

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

 

Зачем вообще нужны кодирование текстов и почему это так важно? Какие кодировки текста существуют и какие из них следует использовать?

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

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

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

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

 

Зачем нужны кодировки

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

Кодировка ASCII

Для начала немного посчитаем. Помните, что такое бит? Это минимальный носитель информации, ноль или один. А байт содержит восемь битов. Сколько может быть комбинаций из нулей и единиц длины 8? Ответ – 2*2*2*2*2*2*2*2=256. Именно столько значений может принимать один байт. Иногда еще байт называют символом – потому что как раз для кодировки символа и стали использовать один байт. Даже меньше, изначально была придумана кодировка ASCII, которая использовала 7 битов – в первые 128 значений можно было вольготно разместить английский алфавит в обоих регистрах, диакритические знаки, цифры и набор спецсимволов. И эта кодировка действительно стала универсальной, поэтому англоязычные пользователи крайне редко могут испытывать проблемы с кодировкой.

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

 

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

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

 

N=2i          256=28           i=8 битов

 

Значит, длина кода для одного символа составляет

8 двоичных знаков (0 или 1)

Рис.1 Стандартная часть кодовой таблицы

Кодировка КОИ-8R

Принцип работы кодировки KOI-8R такой— каждый символ текста кодируется одним единственным байтом.

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

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

 

Кодировка Unicode

Перейдем к кириллице. Для нее стали использовать вторую половину кодовой таблицы – символы 129-256. Однако так сложилось, что различные кодировки были изобретены независимо – одни изобретатели располагали буквы, стремясь к соответствию расположения на пишущих машинках, другие – к тому, чтобы одинаково выглядящие кириллические и латинские буквы находились на расстоянии в 128 (что приводило к тому, что даже программы, не умевшие работать со второй половиной таблицы, более-менее читаемо отображали русский текст). Были и другие идеи; появление Windows также принесло свою кодировку. Но главное, такая кодировка принципиально не могла стать универсальной, так как если латиница была нужна везде (хотя бы для командной строки), то кириллица была лишь одним из национальных алфавитов.

У единой, потенциально универсальной кодировки, существует название: Unicode, и придумана она была уже давно, в 1991 году. В Юникоде используется 6 байтов для отображения символа.

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

 

По формуле Хартли определим количество символов, которые можно закодировать по этому стандарту:

 

N=2i          216=65536

 

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

 

 

Кодировки кириллицы

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

Поэтому коды символов могут принимать значение от 0 до 255. Такие кодировки называют однобайтными. Они позволяют использовать 256 символов (2 в восьмой степени равно 256). Таблица однобайтных кодов символов ASCII состоит из двух частей. Первая часть таблицы ASCII-кодов (от 0 до 127) стандартна для всех компьютеров и содержит:

·                                 коды управляющих символов,

·                                 коды цифр, арифметических операций, знаков препинания,

·                                 некоторые специальные символы,

·                                 коды больших и маленьких латинских букв.

Вторая часть таблицы (коды от 128 до 255) бывает различной в различных компьютерах. Она содержит:

·                                 коды букв национального алфавита,

·                                 коды некоторых математических символов,

·                                 коды символов псевдографики.

Для русских букв используются такие различные кодовые таблицы: КОИ-8, ISO, Mac, CP1251, CP866.

 

 

В последнее время широкое распространение получил новый международный стандарт Unicode.

В Unicode отводится по 2 байта (16 битов) для кодирования каждого символа.

Поэтому с его помощью можно закодировать 65536 различных символов (2 в шестнадцатой степени равно 65536). Коды символов могут принимать значение от 0 до 65535.

 

Примеры решения задач

Задача 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 битов.

Переведем полученное значение в байты. Т.к. 8 бит = 1 байт, то 327680 : 8 = 40960 байт

Теперь в Кбайты. Т.к. 1024 байт = 1 Кбайт, то 40960 : 1024 = 40 Кбайт.

Из предложенных вариантов подходит вариант г) 40 Кбайт.

Задача 3. Автоматическое устройство осуществило перекодировку информационного сообщения на русском языке, первоначально записанного в 16-битном коде Unicode, в 8-битную кодировку КОИ-8. При этом информационное сообщение уменьшилось на 800 бит. Какова длина сообщения в символах?

1) 50 2) 100 3) 400 4) 800

Изменение кодировки с 16 бит на 8 бит, равно 16 — 8 = 8 бит .Следовательно информационный объем каждого символа сообщения уменьшился на 8 бит. Так как объем информационного сообщения уменьшился на 800 бит, следовательно количество символов в сообщение равно 800/8=100.

Ответ: Длина сообщения — 100 символов.

 

Задача 4. Автоматическое устройство осуществило перекодировку информационного сообщения длиной 48 символов, первоначально записанного в 7–битном коде ASCII, в 16–битную кодировку Unicode.

При этом информационное сообщение увеличилось на

1) 48 байт 2) 96 байт 3) 54 байт 4) 432 байт

Изменение кодировки с 7 бит на 16 бит, равно 16 — 7 = 9 бит. Следовательно информационный объем каждого символа сообщения увеличился на 9 бит.Так как длина сообщения равна 48 символов, информационное сообщение увеличилось на 48 * 9 = 432 бита. В предложенных ответах данного ответа нет, следовательно переведем биты в байты — 432/8 = 54 байта.

Ответ: Информационное сообщение увеличилось на 54 байта.

Задача 5. Автоматическое устройство осуществило перекодировку информационного сообщения на русском языке, первоначально записанного в 16–битном коде Unicode, в 8–битную кодировку Windows–1251, при этом информационный объем сообщения составил 60 байт.

Определите информационный объем сообщения до перекодировки.

1) 60 бит 2) 120 бит 3) 960 бит 4) 60 байт

По условиям задачи информационный объем сообщения после кодировки составил 60 байт = 480 бит, следовательно количество символов в сообщении = 480/8 = 60. До перекодировки сообщение кодировалось 16-битным кодом, следовательно информационный объем сообщения до перекодировки = 60 * 16 = 960 бит.

Ответ: информационный объем сообщения до перекодировки 960 бит.

Задача 6. Автоматическое устройство осуществило перекодировку информационного сообщения, первоначально записанного в 7-битном коде ASCII, в 16-битную кодировку Unicode. При этом информационное сообщение увеличилось на 108 бит.

Какова длина сообщения в символах?

1) 12 2) 27 3) 6 4) 62

Изменение кодировки с 7 бит на 16 бит, равно 16 — 7 = 9 бит. Следовательно информационный объем каждого символа сообщения увеличился на 9 бит. По условиям задачи информационный объем сообщения после кодировки составил 108 бит, следовательно количество символов сообщения = 108/9 = 12.

Ответ: длина сообщения 12 символов.

 

Задача 7. В кодировке Unicode на каждый символ отводится два байта. Определите информационный объем слова из двадцати четырех символов в этой кодировке.

1) 384 бита 2) 192 бита 3) 256 бит 4) 48 бит

Решение задачи 5.

Количество символов в сообщении — 24, каждый символ кодируется 2 байтами = 16 бит, следовательно 24 * 16 = 384 бит.

Ответ: 384 бита.

 

Решите самостоятельно

 

  1. В кодировке КОИ-8 каждый символ кодируется 1 байтом. Определите информационный объем сообщения из 20 символов в этой кодировке. Варианты ответов: а) 20 бит, б) 80 бит, в) 160 бит, г) 320 бит.
  2. В кодировке Unicode на каждый символ отводится 2 байта. Определите информационный объем слова из 24 символов в этой кодировке. Найдите верный ответ: а) 384 бита, б) 192 бита, в) 256 бит, г) 48 бит.

Информационный объём фрагмента текста (8 класс) Информатика и ИКТ

Вам известно, что информационный объём I сообщения равен произведению количества К символов в сообщении на информационный вес i символа алфавита: I =К • i.

В зависимости от разрядности используемой кодировки информационный вес символа текста, создаваемого на компьютере, может быть равен:
  • 8 битов (1 байт)- восьмиразрядная кодировка;
  • 16 битов (2 байта) — шестнадцатиразрядная кодировка.

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

Задача 1.
Считая, что каждый символ кодируется одним байтом, определите, чему равен информационный объём следующего высказывания Жан-Жака Руссо:
Тысячи путей ведут к заблуждению, к истине — только один.

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

Ответ: 57 байтов.

Задача 2.
В кодировке Unicode на каждый символ отводится два байта. Определите информационный объём слова из 24 символов в этой кодировке.

Решение:
I = 24 • 2 = 48 (байтов).

Ответ: 48 байтов.

Задача 3.
Автоматическое устройство осуществило перекодировку информационного сообщения на русском языке, первоначально записанного в 8-битовом коде, в 16-битовую кодировку Unicode. При этом информационное сообщение увеличилось на 2048 байтов. Каков был информационный объём сообщения до перекодировки?

Решение:
Информационный вес каждого символа в 16-битовой кодировке в два раза больше информационного веса символа в 8-битовой кодировке. Поэтому при перекодировании исходного блока информации из 8-битовой кодировки в 16-битовую его информационный объём должен был увеличиться вдвое, другими словами, на величину, равную исходному информационному объёму. Следовательно, информационный объём сообщения до перекодировки составлял 2048 байтов = 2 Кб.

Ответ: 2 Кб.

Задача 4.
Выразите в мегабайтах объём текстовой информации в «Современном словаре иностранных слов» из 740 страниц, если на одной странице размещается в среднем 60 строк по 80 символов (включая пробелы). Считайте, что при записи использовался алфавит мощностью 256 символов.

Решение:
Информационный вес символа алфавита мощностью 256 равен восьми битам (одному байту). Количество символов во всём словаре равно 7 40 • 80 • 60 = 3 552 000. Следовательно, объём этого текста в байтах равен 3 552 000 байтов = 3 468,75 Кбайт ≈ 3,39 Мбайт.

Ответ: 3,39 Мбайт.

Самое главное:

  • В зависимости от разрядности используемой кодировки информационный вес символа текста, создаваемого на компьютере, может быть равен:
    • 8 битов (1 байт) — восьмиразрядная кодировка;
    • 16 битов (2 байта) — шестнадцатиразрядная кодировка.
  • Информационный объём фрагмента текста — это количество битов, байтов (килобайтов, мегабайтов), необходимых для записи фрагмента оговорённым способом кодирования.

Вопросы и задания:

  1. Считая, что каждый символ кодируется одним байтом, определите, чему равен информационный объём следующего высказывания Алексея Толстого:
    Не ошибается тот, кто ничего не делает, хотя это и есть его основная ошибка.
    1) 512 битов 2) 608 битов 3) 8 Кбайт 4) 123 байта
    (Всего символов в высказывании — 76. Поскольку на один символ отводится 1 байт, то объем высказывания равен 76 (байт) = 608 (бит). Правильный ответ: 2)
  2. Считая, что каждый символ кодируется 16 битами, оцените информационный объем следующей фразы А. С. Пушкина в кодировке Unicode:
    Привычка свыше нам дана: Замена счастию она.
    1) 44 бита 2) 704 бита 3) 44 байта 4) 704 байта
    (Всего символов во фразе — 44. Поскольку на один символ отводится 2 байта, то объем высказывания равен 88 (байт) = 704 (бит). Правильный ответ: 2)
  3. В текстовом режиме экран монитора компьютера обычно разбивается на 25 строк по 80 символов в строке. Определите объём текста, занимающего весь экран монитора, в кодировке Unicode.
    (Решение:
    В кодировке Unicode каждый символ кодируется 2 байтами. На экран влезает 25 • 80 = 2000 символов. Соответственно, объем текста равен 2000 • 2 = 4000 (байт) ≈ 3,9 (Кбайт)
    Ответ: 4000 байт)
  4. Сообщение занимает 6 страниц по 40 строк, в каждой строке записано по 60 символов. Информационный объём всего сообщения равен 28 800 байтам. Сколько двоичных разрядов было использовано на кодирование одного символа?
    (Решение:
    Сообщение состоит из 6 • 40 • 20 = 14400 символов. Поскольку объем этого текста составляет 28800 байт, то на один символ отводилось 2 байта, т.е. 16-разрядный двоичный код. Текст записан в кодировке Unicode.
    Ответ: 16 разрядов)
  5. Сообщение, информационный объём которого равен 5 Кбайт, занимает 4 страницы по 32 строки, в каждой из которых записано по 40 символов. Сколько символов в алфавите языка, на котором записано это сообщение?
    (Решение:
    I = 5 Кбайт
    K = 4 • 32 • 40
    N = ?N = 2i; I = K • i
    i = I/K, i = (5 • 210 • 23)/(22 • 25 • 23 • 5), i = 23 = 8
    N = 28 = 256
    Ответ: 256 символов в алфавите)

Содержание

Информатика — 8

Памятка
ASCII
UNICODE
Бит
Баят

Числа в тексте кодируются по тем же правилам. То есть каждое число кодируется как символ и занимает 1 байт (в кодировке ASCII), или 2 байта (в кодировке UNICODE). Но, как вы знаете, запись чисел в двоичной системе счисления более краткая. Для примера рассмотрим кодирование числа 19 для каждого случая. В тексте каждая цифра числа, как и любой символ, в соответствии с кодом ASCII, кодируется 8 битами. То есть для кодирования числа 19 необходимо 16 бит (2 байта): 1 — 00110001, 9 — 00111001.

При вычислениях 19 кодируется как число в двоичной системе счисления:
1910=000100112. Значит, во втором случае число 19 представляется 8 битами.

Изучим сами

  1. Запустите текстовый редактор OpenOffice.org Writer (или Microsoft Word).
    Откроется Новый документ.
  2. Наберите фразу “Если ты думаешь, что много знаешь, значит тебе еще нужно
    многому учиться”.
  3. Выберите команду File Save As… Откроется диалоговое окно Save As.
  4. Выберите из списка Save as type вариант Microsoft Word 95 (.doc). Задав документу соответствующее имя, сохраните в своей папке.
  5. Повторите пункт 3. В этот раз для сохранения документа выберите из списка Save as type вариант Text (. txt). Сохраните документ под другим именем в своей папке.
  6. Закройте окно текстового редактора и откройте папку с сохраненными файлами.
  7. Сравните размеры сохраненных файлов. Постарайтесь узнать причину различия размеров этих файлов.

Проверьте изученное

  1. Сколько различных символов можно закодировать при помощи 8 бит?
  2. Сколько различных символов можно закодировать, используя кодировку UNICODE?
  3. Сколько раз поместится в память объемом 2 Кбайта приведенный на уроке афоризм, представленный в кодировке ASCII?
  4. Для учета каждому школьнику присваивается двоичный код одинаковой длины. Достаточно ли 9 бит для кодирования всех учеников школы, если в школе учатся 1000 человек? Ответ обоснуйте.
  5. Автоматическое устройство осуществило перекодировку сообщения, первоначально записанного в коде UNICODE, в 8-битную кодировку ASCII. При этом информационное сообщение уменьшилось на 480 бит. Какова длина сообщения в символах?
Учебник

: Кодировка символов и Unicode Учебник

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

WWW2005 Учебное пособие: интернационализация Интернета Контент и веб-технологии

10 мая 2005 г., Макухари, Тиба, Япония

Мартин Дж. Дюрст ([email protected])

Департамент комплексной информации Технология
Колледж науки и техники
Университет Аояма Гакуин
Токио/Сагамихара, Япония

© 2005 Мартин Дж. Дюрст Аояма Гакуин Университет

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

Общие разработки:

  • Все больше и больше символов, все больше и больше битов на символ
  • Кодировки для больших и больших сообществ (местных, корпоративных, национальный, наднациональный, глобальный)
  • Более сложная кодировка (переключение кода,…)
  • Все больше и больше сложности (прямое сопоставление ключ-символ-глиф -> сложные отношения)
  • 5-битные кодировки
  • 6-битные кодировки
  • 7-битные кодировки (US-ASCII, национальные варианты ISO 646,…)
  • 8-битные кодировки (EBCDIC, серия ISO 8859-x,…)
  • многобайтовых кодировок
  • Многобайтовые кодировки (например, shift_JIS, euc-jp,…)
    • трудно идентифицировать символы в потоке байтов
    • адаптация программы от однобайтовой к многобайтовой требует огромных работа
    • разные многобайтовые кодировки требуют разных адаптаций
  • Переключение кода (напр.грамм. iso-2022-jp, ISO 2022 в целом)
    • еще сложнее в обращении, чем многобайтовые кодировки
    • трудно получить точную информацию о некоторых деталях
  • Специальные и исследовательские кодировки
  • Корпоративные кодировки
  • Национальные кодировки
  • Наднациональные кодировки

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

Основная идея: Единая кодировка для всего мира

Изначально два отдельных проекта:

  • ISO/IEC 10646 (ISO/IEC JTC1 SC2 WG2)
  • Стандарт Unicode (Консорциум Unicode)

Объединено между 1991 и 1993 годами, чтобы избежать двух глобальных кодировок.

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

  1. Два очень точно синхронизированных стандарта
  2. Набор символов
  3. Таблица символов с номером для каждого символа
  4. Три кодировки
  5. Большая помощь в работе с персонажами
  • Стандарт Unicode, доступный в виде книги (ISBN 0-321-18578-1) и онлайн
  • ISO/IEC 10646, доступен на компакт-диске
  • ISO/IEC 10646, переведенный на многие национальные варианты (например,грамм. JIS Х 0221)
  • Идентифицирующие символы:
    • Какие скрипты
    • Какие символы (в отличие от несимволов, таких как логотипы, иконки,…)
    • Какие символы (какой уровень абстракции,…)
  • Кодирование в центре ввода/рендеринга/обработки/хранения
  • Унификация (какие символы одинаковые, какие разные)
    • Один и тот же символ следует кодировать только один раз, независимо языка
    • Для небольших скриптов решение очевидно или может быть обработано индивидуально

Для иероглифов CJKV необходим более систематический подход:

  • На основе правил унификации, используемых в японском национальном стандарте
  • Ориентирован на обычных пользователей/использование
  • «явно отличающиеся» формы: отдельные кодовые точки (т.грамм.体 U+4F53 vs. 體 U+9AD4)
  • «очень похожих» форм: отдельные кодовые точки, если разные значения (например, 大、犬、太、土、士)
  • в остальном «очень похожие» формы: одна кодовая точка (например, U+8FBB)
  • Оригинальный дизайн ISO/IEC (32-разрядная версия): 128 групп по 256 плоскостей
  • Оригинальный дизайн Unicode (16 бит): 16 бит на символ, 2 16 символов
  • Окончательная структура: 1+16=17 плоскостей:
    • BMP (базовый многоязычный самолет, уровень 0, современное использование)
    • Уровень 1, SMP (дополнительный многоязычный уровень, исторический скрипты,…)
    • Plane 2, SIP (дополнительная идеографическая плоскость, очень редкая) идеограммы)
    • Плоскости 3-13: в настоящее время не используются
    • Самолет 14, SSP (дополнительный самолет специального назначения, теги, вариант селекторы,…)
    • Самолеты 15 и 16: частное использование
  • Номера символов шестнадцатеричные, с использованием цифр 0-9 и A-F
    • Обозначение: U+hhhh, где hhhh представляет собой 4-6 шестнадцатеричных цифр
  • Первые 128 позиций: идентичны US-ASCII
  • Первые 265 позиций: идентичны ISO 8859-1 (Latin-1)
  • Персонажи упорядочены по сценарию и функционируют в блоках
    • Наименьшие блоки: канбун, фонетические расширения катаканы,… (16 символов каждый)
    • Самый большой блок: CJK Unified Ideographs Extension B, от U+20000 до U+2A6DF (42720 символов)
  • Может быть более одного блока для скрипта (пример: 0600..06FF Арабский; 0750..077F арабское дополнение)
  • Некоторые номера не используются или выполняют специальную функцию
    • Несимвольные кодовые точки
    • Коды для частного использования
  • Некоторые «персонажи» выглядят или работают не так, как мы думаем о персонажах
    • Управляющие символы
    • Форматирование символов

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

  • UTF-8
    • Многобайтовое кодирование с хорошими свойствами
    • Совместимость с ASCII в очень сильном смысле
  • UTF-16
    • Кодирование переменной длины, большинство символов 16 бит
    • Внутренняя кодировка для многих приложений и систем
  • UTF-32
    • Очень просто и понятно
    • Используется в некоторых системах Unix для внутренней обработки
от
из до использование байт число
1 2 3 4
U+0000 U+007F US-ASCII 0ххх хххх
U+0080 У+07ФФ латиница,…, арабский 110x хххх 10хх хххх
U+0800 У+ФФФФ остальные БМП 1110 хххх 10хх хххх 10хх хххх
U+10000 У+10ФФФФ не-BMP 1111 0ххх 10хх хххх 10хх хххх 10хх хххх

Допускается только самое короткое кодирование.

  • Очистить роли байтовых значений (одиночные: 0…, начальные: 11…, конечные: 10…, неиспользуемые: C0, C1, F5-FF; ср. например с Shift_JIS)
  • Легко определить начало символа в потоке байтов, синхронизировать в случае ошибок
  • Легко отличить от других кодировок на основе шаблона байтов
  • Нет перекрывающихся совпадений
  • Строгая защита US-ASCII, важная для многих протоколов и операционных систем. системы
  • Двоичная сортировка идентична UCS-4/UTF-32
  • Достаточно компактный для текста с большим количеством символов ASCII

См. Свойства и обещания UTF-8

  • Кодировка по умолчанию для XML
  • Многие протоколы
  • Преобразование IRI->URI
  • Некоторые файловые системы (становятся популярными для имен файлов Unix/Linux)
  • Внутренняя обработка в некоторых приложениях
  • Кодовая единица 16 бит (два байта, одно полуслово)
  • Одна кодовая единица для символов в BMP
  • Две кодовые единицы для символов в плоскостях 1-16
  • 2048 «кодовых точек» в BMP, зарезервированных для UTF-16
    • Старшие заменители: D800-DBFF
    • Младшие суррогаты: DC00-DFFF
  • Каждый символ непосредственно представлен как 32-байтовая кодовая единица (одна слово)
  • Простое, но довольно неэффективное кодирование
  • Используется внутри некоторых Unix-подобных систем и приложений, а также для определенные виды обработки
  • Проблемы с порядком байтов и решения аналогичны проблемам UTF-16
  • .

Только в стандарте Unicode, не является частью ISO/IEC 10646

  • Рендеринг и обработка
  • Преобразование из/в устаревшие (не Unicode) кодировки
  • Двунаправленный рендеринг
  • Сортировка
  • Нормализация
  • Туда и обратно (символы совместимости)
  • Побег
  • Второстепенные точки (XML японский профиль,…)
    • Расширения для конкретных поставщиков
    • незначительные различия в отображении
  • Форматирование символов,…

[и перерыв!]

Что такое кодировка UTF-8? Руководство для непрограммистов

Текст: его важность в Интернете очевидна. Это первая буква «Т» в «HTTP», единственная «Т» в «HTML», и практически каждый веб-сайт так или иначе использует ее, будь то URL-адрес, маркетинговая копия, обзор продукта, вирусный твит или Сообщение блога.(Привет!)

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

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

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

Что такое UTF-8?

UTF-8 означает «Формат преобразования Unicode — 8 бит». Нам это пока не помогло, так что давайте вернемся к основам.

Двоичный файл: как компьютеры хранят информацию

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

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

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

ASCII: преобразование символов в двоичные

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

Библиотека

ASCII включает в себя все прописные и строчные буквы латинского алфавита (A, B, C…), все цифры от 0 до 9 и некоторые распространенные символы (такие как /, ! и ?). Он присваивает каждому из этих символов уникальный трехзначный код и уникальный байт.

В таблице ниже показаны примеры символов ASCII с соответствующими кодами и байтами.

Символ Код ASCII БАЙТ
А 065 01000001
и 097 01100001
Б 066 01000010
б 098 01100010
З 090 01011010
из 122 01111010
0 048 00110000
9 057 00111001
! 033 00100001
? 063 00111111

Так же, как символы объединяются в слова и предложения в языке, двоичный код делает то же самое в текстовых файлах.Итак, предложение «Быстрая коричневая лиса перепрыгивает через ленивую собаку». представленный в двоичном формате ASCII, будет:

 
 

01010100 01101000 01100101 00100000 01110001

01110101 01101001 01100011 01101011 00100000

01100010 01110010 01101111 01110111 01101110

00100000 01100110 01101111 01111000 00100000

01101010 01110101 01101101 01110000 01110011

00100000 01101111 01110110 01100101 01110010

00100000 01110100 01101000 01100101 00100000

01101100 01100001 01111010 01111001 00100000

01100100 01101111 01100111 00101110

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

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

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

Unicode: способ хранения всех символов

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

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

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

Символ Кодовая точка
А U+0041
и U+0061
0 U+0030
9 U+0039
! U+0021
Ø U+00D8
или U+0683
У + 0C9A
𠜎 У+2070Е
😁 У+1Ф601

 

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

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

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

UTF-8: последняя часть головоломки

UTF-8 — это система кодирования Unicode.Он может преобразовать любой символ Unicode в соответствующую уникальную двоичную строку, а также может преобразовать двоичную строку обратно в символ Unicode. В этом смысл «UTF» или «формата преобразования Unicode».

Существуют и другие системы кодирования Unicode, кроме UTF-8, но UTF-8 уникальна, поскольку представляет символы в однобайтовых блоках. Помните, что один байт состоит из восьми битов, отсюда и «-8» в его названии.

Более конкретно, UTF-8 преобразует кодовую точку (которая представляет один символ в Unicode) в набор от одного до четырех байтов.Первые 256 символов в библиотеке Unicode, включая символы, которые мы видели в ASCII, представлены как один байт. Символы, которые появляются позже в библиотеке Unicode, кодируются как двухбайтовые, трехбайтовые и, возможно, четырехбайтовые двоичные единицы.

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

Символ Кодовая точка Двоичная кодировка UTF-8
А U+0041 01000001
и U+0061 01100001
0 U+0030 00110000
9 U+0039 00111001
! U+0021 00100001
Ø U+00D8 11000011 10011000
или U+0683 11011010 10000011
У + 0C9A 11100000 10110010 10011010
𠜎 У+2070Е 11110000 10100000 10011100 10001110
😁 У+1Ф601 11110000 10011111 10011000 10000001

Почему UTF-8 преобразовывает одни символы в один байт, а другие в четыре байта? Короче, для экономии памяти.Используя меньше места для представления более распространенных символов (например, символов ASCII), UTF-8 уменьшает размер файла, позволяя использовать гораздо большее количество менее распространенных символов. Эти менее распространенные символы кодируются двумя или более байтами, но это нормально, если они хранятся экономно.

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

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

Символы UTF-8 в веб-разработке

UTF-8 — это наиболее распространенный метод кодирования символов, используемый сегодня в Интернете, и это набор символов по умолчанию для HTML5.Более 95% всех веб-сайтов, включая ваш собственный, хранят символы таким образом. Кроме того, распространенные методы передачи данных через Интернет, такие как XML и JSON, кодируются стандартами UTF-8.

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

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

.
 
 

<метакодировка="UTF-8">

Это сообщает браузеру, что файл HTML закодирован в UTF-8, чтобы браузер мог преобразовать его обратно в разборчивый текст.

UTF-8 против UTF-16

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

Это различие очевидно из их имен. В UTF-8 наименьшее двоичное представление символа составляет один байт или восемь бит. В UTF-16 наименьшее двоичное представление символа составляет два байта или шестнадцать бит.

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

Символ Двоичная кодировка UTF-8 Двоичная кодировка UTF-16
А 01000001 01000001 11011000 00001110 11011111
𠜎 11110000 10100000 10011100 10001110 01000001 11011000 00001110 11011111

 

Кодировка

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

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

Расшифровка мира кодировки UTF-8

Было много слов о словах, поэтому давайте подытожим то, что мы рассмотрели:

  1. Компьютеры хранят данные, включая текстовые символы, в двоичном виде (1 и 0).
  2. ASCII был ранним способом кодирования или преобразования символов в двоичный код, чтобы компьютеры могли их хранить. Однако ASCII не предоставлял достаточно места для представления нелатинских символов и чисел в двоичном виде.
  3. Unicode был решением этой проблемы. Unicode присваивает уникальный «код» каждому символу в каждом человеческом языке.
  4. UTF-8 — это метод кодирования символов Unicode. Это означает, что UTF-8 берет кодовую точку для данного символа Unicode и переводит ее в двоичную строку. Он также делает обратное, читая двоичные цифры и преобразовывая их обратно в символы.
  5. UTF-8 в настоящее время является самым популярным методом кодирования в Интернете, поскольку он может эффективно хранить текст, содержащий любой символ.
  6. UTF-16 — это еще один метод кодирования, но он менее эффективен для хранения текстовых файлов (за исключением тех, которые написаны на некоторых языках, отличных от английского).

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

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

Текст — Представление данных — Полевое руководство по информатике

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

Ранее мы видели, что с помощью 6 точек шрифта Брайля можно создать 64 уникальных шаблона. Точка соответствует биту, потому что и точки, и биты имеют 2 разных возможных значения.

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

Персонажи Жаргон Бастер

Общее название для прописных и строчных букв, цифр и символов — это символы, например, . a, D, 1, h, 6, *, ] и ~ — все символы. Важно отметить, что пробел также является символом.

Если вы сосчитали правильно, вы должны обнаружить, что было больше 64 символов, и вы могли найти около 95.Поскольку 6 бит могут представлять только 64 символа, нам потребуется больше 6 бит; получается, что нам нужно как минимум 7 бит для представления всех этих символов, так как это дает 128 возможных шаблонов. Это именно то, что делает ASCII-представление текста.

Почему хотя бы 7 бит? Испытание

В предыдущем разделе мы объяснили, что происходит, когда количество точек увеличивается на 1 (помните, что точка в шрифте Брайля — это фактически бит). Можете ли вы объяснить, откуда мы узнали, что если 6 бит достаточно для представления 64 символов, то 7 бит должно быть достаточно для представления 128 символов?

Каждый шаблон в ASCII обычно хранится в 8 битах с одним потерянным битом, а не в 7 битах.Однако крайний левый бит в каждом 8-битном шаблоне равен 0, что означает, что существует только 128 возможных шаблонов. Там, где это возможно, мы предпочитаем иметь дело с полными байтами (8 битами) на компьютере, поэтому в ASCII есть лишний потерянный бит.

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

Двоичный Символ Двоичный Символ     Двоичный Символ
0100000     Пробел     1000000     @ 1100000     `
0100001 ! 1000001 А 1100001 и
0100010 » 1000010 Б 1100010 б
0100011 # 1000011 С 1100011 в
0100100 $ 1000100 Д 1100100 д
0100101 % 1000101 Е 1100101 и
0100110 и 1000110 Ф 1100110 ф
0100111 1000111 Г 1100111 г
0101000 ( 1001000 Х 1101000 ч
0101001 ) 1001001 я 1101001 я
0101010 * 1001010 Дж 1101010 и
0101011 + 1001011 К 1101011 к
0101100 , 1001100 л 1101100 л
0101101 1001101 М 1101101 м
0101110 . 1001110 Н 1101110 н
0101111 / 1001111 О 1101111 или
0110000 0 1010000 Р 1110000 р
0110001 1 1010001 В 1110001 к
0110010 2 1010010 Р 1110010 р
0110011 3 1010011 С 1110011 с
0110100 4 1010100 Т 1110100 т
0110101 5 1010101 У 1110101 и
0110110 6 1010110 В 1110110 против
0110111 7 1010111 Вт 1110111 с
0111000 8 1011000 х 1111000 х
0111001 9 1011001 Д 1111001 и
0111010 : 1011010 З 1111010 г
0111011 ; 1011011 [ 1111011 {
0111100 < 1011100 \ 1111100 |
0111101 = 1011101 ] 1111101 }
0111110 > 1011110 ^ 1111110 ~
0111111 ? 1011111 _ 1111111 Удалить

Например, буква «с» (нижний регистр) в таблице имеет шаблон «01100011» (0 в начале — это просто дополнительное дополнение, чтобы увеличить ее до 8 бит).Буква «о» имеет узор «01101111». Вы можете написать слово, используя этот код, и если вы дадите его кому-то другому, он сможет точно его расшифровать.

Компьютеры могут представлять фрагменты текста последовательностями этих шаблонов, как это делает Брайль. Например, слово «компьютеры» (все в нижнем регистре) будет 01100011 01101111 01101101 01110000 01110101 01110100 01100101 01110010 01110011. Это потому, что «с» — это «01100011», «о» — это «01101111» и так далее. Взгляните на приведенную выше таблицу ASCII, чтобы проверить, правы ли мы!

Что означает ASCII? Любопытство

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

Больше практики в ASCII Испытание

Попробуйте выполнить следующие упражнения ASCII:

  • Как бы вы представили «науку» в ASCII? (игнорируйте знаки " )
  • Как бы вы представили «Wellington» в ASCII? (обратите внимание, что оно начинается с заглавной буквы «W»)
  • Как бы вы представили «358» в ASCII? (это три символа , даже если это выглядит как число)
  • Как бы вы представляли «Привет, как дела?» в ASCII? (ищите запятую, вопросительный знак и символы пробела в таблице ASCII)

Обязательно попробуйте их все, прежде чем проверять ответ!

Ответы на вопросы выше Спойлер!

Вот ответы.

  • «наука» = 01110011 01100011 01101001 01100101 01101110 01100011 01100101
  • «Wellington» = 01010111 01100101 01101100 01101100 01101001 01101110 01100111 01110100 01101111 01101110
  • «358» = 00110011 00110101 00111000
  • «Привет, как ты?» = 1001000 1100101 1101100 1101100 1101111 0101100 0100000 1101000 1101111 1110111 0100000 1100001 1110010 1100101 0100000 1111001 1101111 1110101 0111111

Обратите внимание, что текст «358» рассматривается как 3 символа в ASCII, что может быть запутано, поскольку текст «358» отличается от числа 358! Вы могли столкнуться с этим различием в электронной таблице e.грамм. если ячейка начинается с кавычки в Excel, она обрабатывается как текст, а не число. Одно место, где это происходит, — это телефонные номера; если вы введете 027555555 в электронную таблицу как число, оно появится как 27555555, но в виде текста может отображаться 0. На самом деле телефонные номера — это не просто цифры, потому что начальный ноль может быть важен, так как они могут содержать другие символы — например, +64 3 555 1234 доб. 1234.

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

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

Что было до ASCII? Любопытство

Есть несколько других кодов, которые были популярны до ASCII, включая код Бодо и EBCDIC. Широко используемым вариантом кода Бодо был «код Мюррея», названный в честь новозеландского изобретателя Дональда Мюррея). Одним из значительных улучшений Мюррея было введение идеи «управляющих символов», таких как возврат каретки (новая строка).Клавиша «управление» все еще существует на современных клавиатурах.

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

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

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

Наиболее широко используемые схемы кодирования Unicode называются UTF-8, UTF-16 и UTF-32; вы могли видеть эти имена в заголовках электронных писем или описаниях текстовых файлов.Некоторые из схем кодирования Unicode имеют фиксированную длину , а некоторые имеют переменную длину . Фиксированная длина означает, что каждый символ представляется с использованием одинакового количества битов. Переменная длина означает, что некоторые символы представлены меньшим количеством битов, чем другие. Лучше иметь переменную длину , так как это гарантирует, что наиболее часто используемые символы будут представлены меньшим количеством битов, чем редко используемые символы. Конечно, то, что может быть наиболее часто используемым иероглифом в английском языке, не обязательно является наиболее часто используемым иероглифом в японском языке.Вам может быть интересно, зачем нам так много схем кодирования для Unicode. Оказывается, некоторые лучше подходят для текста на английском языке, а некоторые — для текста на азиатском языке.

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

UTF-32 — это схема кодирования Unicode с фиксированной длиной . Представление каждого символа — это просто его число, преобразованное в 32-битное двоичное число.Ведущие нули используются, если битов недостаточно (точно так же, как вы можете представить 254 как 4-значное десятичное число — 0254). 32 бита — это хорошее круглое число на компьютере, часто называемое словом (что немного сбивает с толку, поскольку мы можем использовать символы UTF-32 для представления английских слов!)

Например, символ H в UTF-32 будет выглядеть так:

 00000000 00000000 00000000 01001000
 

Символ $ в UTF-32 будет:

 00000000 00000000 00000000 00100100
 

И символ (собака по-китайски) в UTF-32 будет:

 00000000 00000000 01110010 10101100
 

Следующий интерактивный файл позволит вам преобразовать символ Unicode в его представление UTF-32.Также отображается номер символа Unicode. Биты — это просто двоичная форма числа символов.

Представьте свое имя с помощью UTF-32 Проект
  1. Представляйте каждый символ своего имени в кодировке UTF-32.
  2. Проверьте, сколько битов требуется для вашего представления, и объясните, почему в нем так много (помните, что для каждого символа требуется 32 бита)
  3. Объясните, как вы узнали, как представлять каждый символ.Даже если вы использовали интерактив, вы все равно должны быть в состоянии объяснить его с точки зрения двоичных чисел.

ASCII фактически использовал тот же подход. Каждый символ ASCII имеет число от 0 до 255, а представление символа — число, преобразованное в 8-битное двоичное число. ASCII также является схемой кодирования с фиксированной длиной — каждый символ в ASCII представлен 8 битами.

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

Насколько велики 32 бита? Испытание
  1. Какое наибольшее число может быть представлено 32 битами? (как в десятичном, так и в двоичном формате).

  2. Наибольшее число в Юникоде, которому назначен символ, на самом деле не является самым большим возможным 32-битным числом — это 00000000 00010000 11111111 11111111. Что это за десятичное число?

  3. Большинство чисел, которые могут быть составлены с использованием 32 бит, не имеют прикрепленных к ним символов Unicode — много свободного места.Для этого есть веские причины, но если бы у вас было более короткое число, которое могло бы представлять любой символ, какое минимальное количество битов вам потребовалось бы, учитывая, что в настоящее время существует около 120 000 символов Unicode?

Ответы на вышеуказанный вызов Спойлер!
  1. Наибольшее число, которое может быть представлено с помощью 32 бит, равно 4 294 967 295 (около 4,3 миллиарда). Возможно, вы видели это число раньше — это самое большое целое число без знака, которое 32-битный компьютер может легко представить в таких языках программирования, как C.

  2. Десятичное число для самого большого символа — 1 114 111.

  3. Вы можете представить все текущие символы с помощью 17 бит. Максимальное число, которое вы можете представить с помощью 16 бит, равно 65 536, что недостаточно. Если мы дойдем до 17 бит, это даст 131 072, что больше 120 000. Следовательно, нам нужно 17 бит.

UTF-8 — это схема кодирования переменной длины для Unicode. Для представления символов с более низким номером Unicode требуется меньше битов, чем для символов с более высоким номером Unicode.Представления UTF-8 содержат 8, 16, 24 или 32 бита. Помня, что байта — это 8 бит, это 1, 2, 3 и 4 байта.

Например, символ H в UTF-8 будет выглядеть так:

Символ ǿ в UTF-8 будет выглядеть так:

И символ (собака по-китайски) в UTF-8 будет:

 11100111 10001010 10101100
 

Следующий интерактивный файл позволит вам преобразовать символ Unicode в его представление UTF-8.Также отображается номер символа Unicode.

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

Шаг 1. Найдите номер Unicode вашего персонажа.

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

Шаг 3. Подсчитайте количество битов в двоичном числе и выберите правильный шаблон для использования в зависимости от количества битов. Шаг 4 объяснит, как использовать шаблон.

 7 или меньше битов: 0xxxxxxx
11 или меньше бит: 110xxxxx 10xxxxxx
16 или меньше бит: 1110xxxx 10xxxxxx 10xxxxxx
21 бит или меньше: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
 

Шаг 4. Замените крестики в шаблоне битами двоичного числа, преобразованного на шаге 2.Если иксов больше, чем битов, замените крайние слева лишние иксы на 0.

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

Шаг 1. Определите, что номер Unicode для равен 35987 .

Шаг 2. Преобразовать 35987 в двоичный код, получив 10001100 10010011 .

Шаг 3. Подсчитайте, что имеется 16 бит, поэтому следует использовать третий шаблон 1110xxxx 10xxxxxx 10xxxxx .

Шаг 4. Подставьте биты в шаблон, чтобы заменить x – 11101000 10110010 10010011 .

Таким образом, представление для будет 11101000 10110010 10010011 с использованием UTF-8.

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

Однако следующий интерактив позволит вам представить текст с помощью UTF-16.Попробуйте поместить в него текст на английском и текст на японском. Сравните представления с тем, что вы получаете с UTF-8.

Мы рассмотрели ASCII, UTF-32, UTF-8 и UTF-16.

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

Представительство       Переменная или фиксированная       бит на символ       Использование в реальном мире
ASCII Фиксированная длина 8 бит Больше не используется
UTF-8 Переменная длина 8, 16, 24 или 32 бита Очень широко используется
UTF-16 Переменная длина 16 или 32 бита Широко используемый
UTF-32 Фиксированная длина 32 бита Редко используется

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

  1. Может представлять все символы независимо от языка.
  2. Представляет фрагмент текста, используя как можно меньше битов.

Мы знаем, что UTF-8, UTF-16 и UTF-32 могут представлять все символы, а ASCII может представлять только английский язык. Следовательно, ASCII не соответствует первому критерию. А вот со вторым критерием все не так просто.

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

Размер кодировки Unicode

Введите текст для расчета длины:

Вычислить длину битов

Длина кодирования:

UTF-8: 0 бит

UTF-16: 0 бит

UTF-32: 0 бит

Как правило, UTF-8 лучше подходит для английского текста, а UTF-16 — для азиатского текста.UTF-32 всегда требует 32 бита для каждого символа, поэтому на практике он непопулярен.

Эмодзи и Юникод Любопытство

Эти милые маленькие символы, которые вы можете использовать в своих статусах, текстах и ​​т. д. в социальных сетях, называются «эмоджи», и каждый из них имеет собственное значение Unicode. Японские мобильные операторы были первыми, кто использовал эмодзи, но их недавняя популярность привела к тому, что многие из них стали частью стандарта Unicode, и сегодня в него включено более 1000 различных эмодзи.Актуальный их список можно увидеть здесь. Интересно отметить, что один и тот же смайлик будет выглядеть по-разному на разных платформах, например &#128518 («улыбающееся лицо с открытым ртом и плотно закрытыми глазами») в моем твите будет выглядеть совсем иначе, чем на вашем iPhone. . Это связано с тем, что Консорциум Unicode предоставляет только коды символов для каждого смайлика, а конечные поставщики определяют, как будет выглядеть этот смайлик, например. для устройств Apple используется шрифт «Apple Color Emoji» (для этого существуют правила, обеспечивающие единообразие в каждой системе).

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

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

Возможно, вы обменялись банкнотами, в которых 1 вместо «а», 2 вместо «б», 3 вместо «в», вплоть до 26 вместо «г».Мы можем преобразовать эти числа в 5-значные двоичные числа. На самом деле, вы также получите те же 5 бит для каждой буквы, просмотрев последние 5 бит для нее в таблице ASCII (и не имеет значения, смотрите ли вы на прописную или строчную букву).

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

Представительство по воде Спойлер!
 ш: 10111
а: 00001
т: 10100
е: 00101
р: 10010
 

А теперь попробуйте расшифровать музыкальное видео!

Предыдущий:
Числа Следующий:
Изображения и цвета

Как компьютеры обрабатывают текст: Кодировка

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

Если вся статья слишком длинная, прочитайте только раздел 4.

Есть много шагов, когда вы переходите от рукописного текста к окончательному тексту документ на компьютере. В этой статье я хотел бы объяснить, как компьютеры учили хранить текст (с упором на Юникод). В разделе 1 я описываю как можно систематизировать символы, чтобы компьютеры могли их понимать. В раздел 2, способ кодирования символов (хранящихся как нули и единицы) обсуждалось. В разделе 3 кратко рассматривается способ ввода символов в компьютер, а раздел 4 – это сообщение вся история.

В приложении А показаны подводные камни кодировок, отличных от Unicode. на примере LaTeX.

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

Первый шаг — научить компьютер символам, которые мы хотим использовать, когда набираем наш текст. Все, что он делает, это присваивает число (целое) персонаж. Ни больше ни меньше. Набор символов может принять решение не присвойте несколько номеров, чтобы помочь кодировке символов, если таковые имеются имеется в виду конкретная кодировка.Самым старым набором символов является ASCII, который включает только латинский алфавит, несколько символов и некоторые управляющие символы. Это потому что предполагалось, что каждый символ должен храниться в 7 битах (нулях или единиц), что составляет 128 символов. Когда компьютеры перешли на использование 8 бит (1 байт) в качестве основной единицы информации, максимальное количество символов удвоился, что привело к серии 8-битных кодировок, в первую очередь тех, указан в ISO/IEC 8859, который содержит кодировки для всех европейских языки и некоторые другие (Возможно, вы слышали о Latin-1, Latin-2 и т.д.). я начали использовать кодировку слов, потому что стандарт определяет как набор символов и кодировка. Однако эти два различны, как мы увидим в следующем разделе. Эти кодировки были шагом вперед, потому что теперь вы могли сохранить много языков в цифровых файлах. Однако проблема заключалась в том, что для каждого файл, вам нужно знать, что такое кодировка. И для каждого файла приходилось оставаться внутри этого набора символов.

Решение этой проблемы называется Unicode. Юникод — это набор кодовых точек, значение которого может варьироваться от 0 до 1 114 111.Если вы представляете, что хотите хранить число в 4 байта (32 бита) вы получаете 2 32 вариантов, то есть 4 294 967 296. На самом деле, даже некоторые числа в указанном выше диапазоне не заполняется по разным причинам. Тем не менее, это количество символов вполне достаточно для всех языков в мире и за его пределами (совсем недавно эмодзи, например).

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

1.1 Эквивалентность Юникода

Помимо кодовых точек для символов, существуют кодовые точки для частей символы, такие как диакритические знаки. Однако это привело к двусмысленности, т. потому что многие символы в Юникоде состоят, например, из письмо с диакритический знак, и, следовательно, может быть закодирован двумя разными способами. Для например, буква é может быть закодирована просто как символ é или как символ e за которым следует комбинированный символ ´ для острого ударения. Такая двусмысленность нежелательно, и мы хотим иметь уникальный способ представления текста.Поэтому Юникод также определяет эквивалентность. И это эквивалентность двух разных видов.

Каноническая эквивалентность

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

Эквивалентность совместимости

Если существуют разные способы идентификации одной и той же части информации, например дробь ½ и 1⁄2 (т.е. 1 дробь-слеш 2), они считаются эквивалентными. Точно так же постоянная Планка ℎ будет отображена на букву h и обведена кружком. числа будут отображаться на числа (например, ① отображаются на 1). Иногда Unicode имеет решил включить кодовые точки для символов с определенным стилем (например,грамм. курсив, полужирный шрифт или альтернативные формы, такие как ſ старый латинский символ для буквы с). Они также отображаются на обычное письмо. Эта форма эквивалентности полезно напр. если вы ищете документ.

Формы нормализации

Если вы хотите, чтобы тексты были в единообразной форме, вы можете сделать одно из следующих действий:

  • Каноническая декомпозиция (форма нормализации D = NFD)

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

  • Каноническая декомпозиция с последующей канонической композицией (NFC)

    То же, что и NFD, но с последующей композицией, в которой все объединяющие символы составляются с основным. Обратите внимание, что это не всегда возможно и некоторые символы могут быть представлены только в разложенном виде. Этот процесс не всегда полностью обратим. Символ Ангстрема получает разложить, а затем составить до буквы Å шведского алфавита, которая это буква, используемая для символа Ангстрема.Глиф (графическая форма) для эти два должны быть точно такими же.

  • Разложение совместимости (NFKD)

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

  • Разложение совместимости с последующей канонической композицией (NFKC)

    Так же, как NFKD, но с последующей канонической композицией.

NFC и NFD должны давать одну и ту же строку байтов для любых двух текстов, которые должны отображать точно такие же глифы.Затем NFKC и NFKD должны дать одна и та же строка байтов для любого текста, содержащего ту же информацию (в широком смысле Говорящий).

1.2 Совместимые символы

Основное преимущество Unicode — универсальность. Однако оно прибыло в мир, полный различных кодировок. Чтобы улучшить внедрение Unicode, существуют много кодовых точек, которые включены только из соображений совместимости, например. есть такой символ в другой кодировке и вы не хотите потерять этот информация, если вы конвертируете в Unicode и обратно.В идеале все, что написано непосредственно в Unicode следует избегать этого. Они включают в себя такие вещи, как лигатуры (должно быть свойством шрифта, а не символов), предварительно составленный римский цифры (этот Ⅻ является одним символом и не должен быть) или даже предварительно составленным дроби, например ¼, которые при правильном обращении должны быть идентичны 1⁄4.

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

1.3 Математические шрифты

Unicode предоставляет обширный набор математических символов. Кроме того, там также несколько целых алфавитов (жирный, скоропись, без засечек и т. д.). Юникод это предполагается кодировать только обычный текст без форматирования. В то время как в обычном тексте, форматирование не меняет значения слов, в математике меняет. Ан примером может быть вектор скорости 𝒗 в отличие от скалярной скорости 𝑣, что является его величиной. Точно так же прямые i и e представляют мнимую единицу и число Эйлера, а 𝑖 и 𝑒 будут индексная переменная и элементарный заряд.Для учета этих очень важных означающие различия, которые не должны быть потеряны, например. при копировании и вставке, Unicode решил включить кодовые точки для

.
  • A, 𝐀, 𝐴, 𝑨 = обычный, полужирный, курсив, и полужирный курсив с засечками Латинский алфавит
  • 𝒜, 𝓐 = обычный и жирный шрифт (курсив, каллиграфия) Латинский алфавит
  • 𝔄, 𝕬 = обычный и жирный фрактур Латинский алфавит
  • 𝔸 = латинский алфавит с двойным ударением
  • 𝖠, 𝗔, 𝘈, 𝘼 = обычный, жирный, курсив и полужирный курсив без засечек Латинский алфавит
  • 𝙰 = моноширинный латинский алфавит
  • ω, 𝛚, 𝜔, 𝝎 = обычный, полужирный, курсив, полужирный курсив с засечками Греческий алфавит
  • 𝞈, 𝟂 = полужирный и полужирный курсив без засечек греческий алфавит
  • 1, 𝟏 = обычные и жирные цифры
  • 𝟙 = цифры с двойным ударением
  • 𝟣, 𝟭 = обычные и полужирные цифры без засечек
  • 𝟷 = моноширинные цифры

Это означает, что математическая формула, скопированная и вставленная между источниками, должна сохранить свое значение.Однако их никогда не следует использовать вместо обычных форматирование. Эти символы не ведут себя как обычные буквы и цифры. (даже если бы они по совместимости разлагались бы на них). Помните, Юникод все о простом тексте и без форматирования. К сожалению, этим часто злоупотребляют. Точно так же в Unicode есть символы в верхнем и нижнем индексах, которые следует использовать только в Международном фонетическом алфавите (IPA).

1.4 Объединение Хань (Унихан)

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

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

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

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

2.1 UTF-32

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

2.2 UTF-16

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

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

Вы кодируете это как:

  110110xx xxxxxxxx 110111yy гггггггггггг
  

Они называются суррогатной парой.

2.3 UTF-8

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

  0xxxxxxx
110ххххх 10хххххх
1110хххх 10хххххх 10хххххх
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
  

У этого есть много преимуществ.

  • Совместимость с ASCII

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

  • Эффективность использования пространства

    Если ваш текст в основном или полностью ASCII, вы используете около одного байта на персонаж. Если вы используете только кодовые точки ниже U+07FF, вы используете два байта на персонаж. Затем есть регион, где UTF-16 по-прежнему будет использовать только два байт, в то время как UTF-8 использует три, что делает его менее эффективным.Однако в В большинстве случаев сегодня нас не очень волнует размер обычного текста. документы.

  • Порядок байтов

    В UTF-16 и UTF-32 вы просите компьютер сохранить числа, которые не помещается в один байт. Например:

      110110xx хххххххх | 110111гг гггггггггг
      

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

По этим и другим причинам UTF-8 стала самой распространенной кодировкой. сегодня. Это рекомендуемая кодировка для HTML 5 и более поздних версий, и более 95% веб-сайты используют его.

Первые два шага выполнены. Компьютер может представить любой мыслимый символ и сохранить его в бинарном файле. Однако наше общение с компьютерами в настоящее время ограничивается почти исключительно тем, что мы можем печатать на клавиатуре или щелкать с помощью мыши. Как вы можете набрать 143 859 разных Unicode? символов + много других комбинаций в компьютер? Большинство людей печатают на клавиатура, которая основана на пишущей машинке и обычно может печатать ASCII символы и некоторые символы с акцентом в зависимости от страны.Для нелатиницы алфавитных языков, они, возможно, имеют ASCII, дополненный другим алфавит. Есть несколько решений

  • Раскладки клавиатуры и клавиши-модификаторы

    Я постоянно переключаюсь между английской и чешской раскладками клавиатуры. Для кодирование, английская раскладка дает лучший доступ к необходимым символам, но если я хочу писать по-чешски со всеми ударениями, я должен использовать Чешская раскладка. Кроме того, вы можете получить доступ к некоторым символам, используя Shift, Клавиши-модификаторы Control и Alt.Однако я использую два макета, и я уже есть проблемы с вводом не буквенно-цифровых символов. Таким образом, это не является жизнеспособным решением, если вы хотите охватить более нескольких языков и общие символы.

  • Палитры персонажей

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

    • Веб-сайт Compart Unicode

      Более техническая, но и более информативная таблица символов Unicode.

    • Таблица символов Юникода

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

  • Ввод числа кодовой точки

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

  • Макросы

    Вы можете определить макросы, состоящие только из символов, которые вы можете напрямую введите на клавиатуре (вероятно, ASCII), но его легко запомнить. (Латекс пошли по этому пути, и, возможно, это одна из причин, почему так популярен среди людей, которым нужно набирать уравнения. Например, если вы хотите введите знак интеграла ∫ в LaTeX, вы должны ввести \int , для суммирования знак ∑, вы должны ввести \sum . Большинство из них довольно интуитивно понятны, и вы можете вводите их так же легко, как вводите слова.Это, однако, означает, что все вводимый текст должен быть обработан компьютером для создания документа. Это также означает, что то, что вы печатаете, не так разборчиво, как если бы вы символы на месте с самого начала. Тем не менее из-за своего простота и удобство ввода, LaTeX широко используется в математике и физических наук, а для уравнений LaTeX можно использовать даже в таких редакторах, как Microsoft Word, страницы Apple.

  • Транскрипция + палитра

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

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

  • Использовать кодировку UTF-8

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

  • Используйте только те символы Unicode, которые вам действительно нужны

    Стандарт ничего не стоит, если его никто не использует. По этой причине Unicode добавлен множество символов совместимости, чтобы быть совместимыми с существующими кодировками. В то же время консорциум Unicode не рекомендует их использование для любых текстов. которые вновь созданы. Поэтому будьте осторожны, копируя текст со всего Интернета.Практически для каждого символа можно найти неясные версии только потому, что они были закодированы где-то еще. подписки, надстрочные, половинные и полноразмерные формы, заключенные в скобки, окруженные и многие другие формы. В качестве примера, здесь все все знаки вопроса, найденные в Юникод ?,❓,❔,﹖,?,︖. Все, кроме первого, неясны или совместимы персонажи. Используя их, вы просто рискуете, что шрифт не будет их поддерживать. и все, что у вас есть, это пустой квадрат вместо вашего персонажа. Все стиль текста должен быть выполнен с помощью вашего редактора или языка разметки, поэтому не делайте таких вещей, как ᏗᎴᏗᎷ ᎮᏒᏗᎴᏗ или 𝒜𝒹𝒶𝓂 𝒫𝓇𝒶𝒹𝒶, которые должны быть достигнуты выбор подходящего шрифта для обычных символов.

Хорошим примером того, почему следует использовать кодировку Unicode (в идеале UTF-8), является то, как LaTeX обрабатывает кодировки. LaTeX — это система набора текста, которую я с любовью использовать все время. Он основан на более старой, но более общей системе набора текста. называется TeX. Принцип работы LaTeX заключается в том, что у вас есть текстовый файл с содержимым ваш документ с дополнительным кодом, который сообщает компьютеру, какие части рубрики, разделы и т.д. в подробности вдаваться не буду, но система в целом имеет много преимуществ, поэтому люди используют его.Однако TeX был изобретен в 1978 г., а LaTeX последовал в 1984 г. Unicode появился только в 1991 г., и он не был сразу понятно, что это будущий мировой стандарт. И это было только до 1993 год, когда был выпущен PDF. Это должно дать вам представление о том, как древние системы TeX и LaTeX есть.

Таким образом, в те доисторические дни компьютеров была мощная программа для набора текста. Родился. Были только 8-битные (а на самом деле в самом начале только 7-битные) кодировки. использовал. Вычислительная мощность и пространство были очень ценны.Под этим обстоятельствах было совершенно разумно делать вещи так, как они были сделаны.

Рабочий процесс A.1 LaTeX

LaTeX сначала читает входной файл. Чтобы сделать это правильно, ему нужно знать, что для его создания использовалась кодировка. (Эта часть была легко адаптирована к UTF-8.) Затем переводит все символы в LICR (внутреннее представление символов LaTeX). Там каждый символ может быть описан символами ASCII, например. ř было бы \v r . Затем LaTeX делает все возможное, чтобы разместить все символы и изображения на страница.Однако затем он должен кодировать каждый символ так, чтобы компьютер находит правильный глиф в выбранном шрифте. Во времена 8-битных кодировок только 256 различных символов могут быть закодированы с использованием одной и той же кодировки (и в на самом деле было еще меньше). Это имеет большие последствия.

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

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

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

A.2 Нагромождение вещей

TeX был создан Дональдом Кнутом, ученым-компьютерщиком и математиком, для печатал свои собственные книги. Все, что ему было нужно, это латинский алфавит, возможно, с несколькими ударения и математические символы. Поэтому он создал набор шрифтов и кодировщиков покрытие его потребностей.Один для обычного текста и несколько для математики. TeX будет знать, когда нужно изменить одну кодировку на другую. (Кнут фактически создал язык программирования под названием METAFONT, чтобы создавать свои шрифты. это Удивительно, как много вещей, которыми мы пользуемся сегодня, были созданы в старые времена. в одиночку программистами для собственных нужд. Другие примеры включают Unix и git, созданный Линусом Торвальдсом.)

По мере того, как TeX, а затем и LaTeX становились все более популярными, людям требовалось больше символов. чем те.Вот и добавили их в ЛИКР и придумали все больше и больше кодировки. И всякий раз, когда вы хотите изменить шрифт вашего документа, вы нужно семейство шрифтов, охватывающее все кодировки, которые вы использовали. Если бы кто-то был разрабатывая подобную систему сегодня, весь ввод можно было бы делать в Unicode, LICR мог бы также будет Unicode (возможно, его расширение), и вывод определенно будет Юникод, поскольку его используют все современные шрифты. Как это было бы просто.

Первоначальная система частично действует и по сей день.Причина в том, что в проектах сообщества, таких как TeX и LaTeX, совместимость имеет решающее значение. А компания, производящая программное обеспечение для предприятий и учреждений, может легче заставить клиентам перейти на новую версию своего программного обеспечения. Общественный проект, где у вас есть несколько основных разработчиков (все еще занимающихся этим в свободное время, даже сегодня!) а остальное вносят пользователи, если ваша новая версия не быстро принятый большинством пользователей, проект обречен. Вот почему TeX и LaTeX развивается крайне медленно и осторожно.Их может быть более 10 или даже 20 лет между основными версиями. Эта стабильность позволяет другим проектам построить над ним.

A.3 Юникод и LaTeX

К счастью, XeTeX и LuaTeX (а также XeLaTeX и LuaLaTeX) являются современными версиями TeX. и LaTeX, которые поддерживают Unicode и шрифты на основе Unicode (OpenType и TrueType). Однако они (пока) не заменили оригиналы, потому что многие люди зависят от LaTeX, а XeTeX и LuaTeX не полностью совместимы. Это привело к дихотомия, когда не все пакеты для LaTeX доступны для других, но это становится лучше со временем.Сегодня можно совершенно спокойно использовать любой в принципе любой шрифт и любой символ Unicode с LaTeX и, надеюсь,

Чтобы исследовать символы Unicode, я написал простой скрипт Python, который принимает строка символов в качестве аргумента и применяет все нормализации ко всем символов строки. Не стесняйтесь скачать его здесь и попробуйте. Ниже приведен пример вывода этой строки «ř dž Å ℓ ℏ ¼ ℃ Ω K 鰳».

  ******************************************************* *******************
******************************************************* *****************
Оригинальный персонаж
-------------------------------------------------- --------
                              Персонаж: ř
                          Кодовая точка в
                            шестнадцатеричный: 0x159
                                десятичный: 345
                                   Имя: ЛАТИНСКАЯ СТРОЧНАЯ БУКВА R С КАРОН
                               Категория: Лл
                      Объединение собственности 0

NFD (каноническая декомпозиция)
-------------------------------------------------- --------
                              Персонаж: р
                          Кодовая точка в
                            шестнадцатеричный: 0x72
                                десятичный: 114
                                   Имя: ЛАТИНСКАЯ СТРОЧНАЯ БУКВА R
                               Категория: Лл
                      Объединение собственности 0

                              Персонаж
                          Кодовая точка в
                            шестнадцатеричный: 0x30c
                                десятичный: 780
                                   Название: COMBINING CARON
                               Категория: Мн
                      Объединение имущества 230


NFC (каноническая декомпозиция с последующей композицией)
-------------------------------------------------- --------
    Идентичен исходной кодовой точке

NFKD (разложение совместимости)
-------------------------------------------------- --------
                        Идентичен НФД

NFKC (разложение совместимости с последующей композицией)
-------------------------------------------------- --------
    Идентичен исходной кодовой точке

******************************************************* *****************
******************************************************* *****************
Оригинальный персонаж
-------------------------------------------------- --------
                              Персонаж: dž
                          Кодовая точка в
                            шестнадцатеричный: 0x1c6
                                десятичный: 454
                                   Имя: ЛАТИНСКАЯ СТРОЧНАЯ БУКВА DZ С КАРОН
                               Категория: Лл
                      Объединение собственности 0

NFD (каноническая декомпозиция)
-------------------------------------------------- --------
    Идентичен исходной кодовой точке

NFC (каноническая декомпозиция с последующей композицией)
-------------------------------------------------- --------
    Идентичен исходной кодовой точке

NFKD (разложение совместимости)
-------------------------------------------------- --------
                              Персонаж: д
                          Кодовая точка в
                            шестнадцатеричный: 0x64
                                десятичный: 100
                                   Имя: ЛАТИНСКАЯ СТРОЧНАЯ БУКВА D
                               Категория: Лл
                      Объединение собственности 0

                              Персонаж: з
                          Кодовая точка в
                            шестнадцатеричный: 0x7a
                                десятичный: 122
                                   Имя: ЛАТИНСКАЯ СТРОЧНАЯ БУКВА Z
                               Категория: Лл
                      Объединение собственности 0

                              Персонаж
                          Кодовая точка в
                            шестнадцатеричный: 0x30c
                                десятичный: 780
                                   Название: COMBINING CARON
                               Категория: Мн
                      Объединение имущества 230


NFKC (разложение совместимости с последующей композицией)
-------------------------------------------------- --------
                              Персонаж: dž
                          Кодовая точка в
                            шестнадцатеричный: 0x1c6
                                десятичный: 454
                                   Имя: ЛАТИНСКАЯ СТРОЧНАЯ БУКВА DZ С КАРОН
                               Категория: Лл
                      Объединение собственности 0


******************************************************* *****************
******************************************************* *****************
Оригинальный персонаж
-------------------------------------------------- --------
                              Персонаж: Å
                          Кодовая точка в
                            шестнадцатеричный: 0x212b
                                десятичный: 8491
                                   Имя: ANGSTROM SIGN
                               Категория: Лу
                      Объединение собственности 0

NFD (каноническая декомпозиция)
-------------------------------------------------- --------
                              Персонаж: А
                          Кодовая точка в
                            шестнадцатеричный: 0x41
                                десятичный: 65
                                   Имя: ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА A
                               Категория: Лу
                      Объединение собственности 0

                              Персонаж
                          Кодовая точка в
                            шестнадцатеричный: 0x30a
                                десятичный: 778
                                   Название: ОБЪЕДИНЯЮЩЕЕ КОЛЬЦО ВЫШЕ
                               Категория: Мн
                      Объединение собственности 230


NFC (каноническая декомпозиция с последующей композицией)
-------------------------------------------------- --------
                              Персонаж: Å
                          Кодовая точка в
                            шестнадцатеричный: 0xc5
                                десятичный: 197
                                   Имя: ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА A С КОЛЬЦОМ ВЫШЕ
                               Категория: Лу
                      Объединение собственности 0


NFKD (разложение совместимости)
-------------------------------------------------- --------
                        Идентичен НФД

NFKC (разложение совместимости с последующей композицией)
-------------------------------------------------- --------
                        Идентичен NFC

******************************************************* *****************
******************************************************* *****************
Оригинальный персонаж
-------------------------------------------------- --------
                              Персонаж: ℓ
                          Кодовая точка в
                            шестнадцатеричный: 0x2113
                                десятичный: 8467
                                   Имя: СЦЕНАРИЙ МАЛЕНЬКИЙ L
                               Категория: Лл
                      Объединение собственности 0

NFD (каноническая декомпозиция)
-------------------------------------------------- --------
    Идентичен исходной кодовой точке

NFC (каноническая декомпозиция с последующей композицией)
-------------------------------------------------- --------
    Идентичен исходной кодовой точке

NFKD (разложение совместимости)
-------------------------------------------------- --------
                              Персонаж: л
                          Кодовая точка в
                            шестнадцатеричный: 0x6c
                                десятичный: 108
                                   Имя: ЛАТИНСКАЯ СТРОЧНАЯ БУКВА L
                               Категория: Лл
                      Объединение собственности 0


NFKC (разложение совместимости с последующей композицией)
-------------------------------------------------- --------
                       Идентичен НФКД

******************************************************* *****************
******************************************************* *****************
Оригинальный персонаж
-------------------------------------------------- --------
                              Персонаж: ℏ
                          Кодовая точка в
                            шестнадцатеричный: 0x210f
                                десятичный: 8463
                                   Название: ПОСТОЯННАЯ ПЛАНКА НАД ДВУМЯ ПИ
                               Категория: Лл
                      Объединение собственности 0

NFD (каноническая декомпозиция)
-------------------------------------------------- --------
    Идентичен исходной кодовой точке

NFC (каноническая декомпозиция с последующей композицией)
-------------------------------------------------- --------
    Идентичен исходной кодовой точке

NFKD (разложение совместимости)
-------------------------------------------------- --------
                              Персонаж: ħ
                          Кодовая точка в
                            шестнадцатеричный: 0x127
                                десятичный: 295
                                   Имя: ЛАТИНСКАЯ СТРОЧНАЯ БУКВА H С ШТРИХОМ
                               Категория: Лл
                      Объединение собственности 0


NFKC (разложение совместимости с последующей композицией)
-------------------------------------------------- --------
                       Идентичен НФКД

******************************************************* *****************
******************************************************* *****************
Оригинальный персонаж
-------------------------------------------------- --------
                              Характер: ¼
                          Кодовая точка в
                            шестнадцатеричный: 0xbc
                                десятичный: 188
                                   Название: ВУЛЬГАРНАЯ ДРОБЬ ОДНА ЧЕТВЕРТЬ
                               Категория: Нет
                      Объединение собственности 0

NFD (каноническая декомпозиция)
-------------------------------------------------- --------
    Идентичен исходной кодовой точке

NFC (каноническая декомпозиция с последующей композицией)
-------------------------------------------------- --------
    Идентичен исходной кодовой точке

NFKD (разложение совместимости)
-------------------------------------------------- --------
                              Персонаж: 1
                          Кодовая точка в
                            шестнадцатеричный: 0x31
                                десятичный: 49
                                   Имя: ЦИФРА ОДИН
                               Категория: Нд
                      Объединение собственности 0

                              Персонаж: ⁄
                          Кодовая точка в
                            шестнадцатеричный: 0x2044
                                десятичный: 8260
                                   Название: BRACTION SLASH
                               Категория: См
                      Объединение собственности 0

                              Персонаж: 4
                          Кодовая точка в
                            шестнадцатеричный: 0x34
                                десятичный: 52
                                   Имя: ЦИФРА ЧЕТЫРЕ
                               Категория: Нд
                      Объединение собственности 0


NFKC (разложение совместимости с последующей композицией)
-------------------------------------------------- --------
                       Идентичен НФКД

******************************************************* *****************
******************************************************* *****************
Оригинальный персонаж
-------------------------------------------------- --------
                              Характер: ℃
                          Кодовая точка в
                            шестнадцатеричный: 0x2103
                                десятичный: 8451
                                   Имя: ГРАДУС ЦЕЛЬСИЯ
                               Категория: Итак
                      Объединение собственности 0

NFD (каноническая декомпозиция)
-------------------------------------------------- --------
    Идентичен исходной кодовой точке

NFC (каноническая декомпозиция с последующей композицией)
-------------------------------------------------- --------
    Идентичен исходной кодовой точке

NFKD (разложение совместимости)
-------------------------------------------------- --------
                              Символ: °
                          Кодовая точка в
                            шестнадцатеричный: 0xb0
                                десятичный: 176
                                   Имя: ЗНАК СТЕПЕНИ
                               Категория: Итак
                      Объединение собственности 0

                              Персонаж: С
                          Кодовая точка в
                            шестнадцатеричный: 0x43
                                десятичный: 67
                                   Имя: ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА C
                               Категория: Лу
                      Объединение собственности 0


NFKC (разложение совместимости с последующей композицией)
-------------------------------------------------- --------
                       Идентичен НФКД

******************************************************* *****************
******************************************************* *****************
Оригинальный персонаж
-------------------------------------------------- --------
                              Персонаж: Ом
                          Кодовая точка в
                            шестнадцатеричный: 0x2126
                                десятичный: 8486
                                   Имя: ЗНАК ОМ
                               Категория: Лу
                      Объединение собственности 0

NFD (каноническая декомпозиция)
-------------------------------------------------- --------
                              Персонаж: Ом
                          Кодовая точка в
                            шестнадцатеричный: 0x3a9
                                десятичный: 937
                                   Имя: ГРЕЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ОМЕГА
                               Категория: Лу
                      Объединение собственности 0


NFC (каноническая декомпозиция с последующей композицией)
-------------------------------------------------- --------
                        Идентичен НФД

NFKD (разложение совместимости)
-------------------------------------------------- --------
                        Идентичен НФД

NFKC (разложение совместимости с последующей композицией)
-------------------------------------------------- --------
                        Идентичен НФД

******************************************************* *****************
******************************************************* *****************
Оригинальный персонаж
-------------------------------------------------- --------
                              Персонаж: К
                          Кодовая точка в
                            шестнадцатеричный: 0x212a
                                десятичный: 8490
                                   Имя: ЗНАК КЕЛЬВИНА
                               Категория: Лу
                      Объединение собственности 0

NFD (каноническая декомпозиция)
-------------------------------------------------- --------
                              Персонаж: К
                          Кодовая точка в
                            шестнадцатеричный: 0x4b
                                десятичный: 75
                                   Имя: ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА K
                               Категория: Лу
                      Объединение собственности 0


NFC (каноническая декомпозиция с последующей композицией)
-------------------------------------------------- --------
                        Идентичен НФД

NFKD (разложение совместимости)
-------------------------------------------------- --------
                        Идентичен НФД

NFKC (разложение совместимости с последующей композицией)
-------------------------------------------------- --------
                        Идентичен НФД

******************************************************* *****************
******************************************************* *****************
Оригинальный персонаж
-------------------------------------------------- --------
                              Персонаж: 鰳
                          Кодовая точка в
                            шестнадцатеричный: 0x9c33
                                десятичный: 39987
                                   Название: CJK УНИФИЦИРОВАННАЯ ИДЕОГРАФ-9C33
                               Категория: Ло
                      Объединение собственности 0

NFD (каноническая декомпозиция)
-------------------------------------------------- --------
    Идентичен исходной кодовой точке

NFC (каноническая декомпозиция с последующей композицией)
-------------------------------------------------- --------
    Идентичен исходной кодовой точке

NFKD (разложение совместимости)
-------------------------------------------------- --------
    Идентичен исходной кодовой точке

NFKC (разложение совместимости с последующей композицией)
-------------------------------------------------- --------
    Идентичен исходной кодовой точке
  

Система кодирования UNICODE | Эдукерс

[vc_row][vc_column][vc_custom_heading text=»Что такое юникод?» font_container=»tag:h2|text_align:left» google_fonts=»font_family:Arimo%3Aregular%2Citalic%2C700%2C700italic|font_style:700%20bold%20regular%3A700%3Anormal»][vc_column_text]Система кодирования UNICODE изменила правила игры.Компьютер, являющийся электронным устройством, имеет только два состояния LOW или HIGH, представленные 0 и 1 соответственно. Таким образом, компьютеры способны представлять все и вся только в виде чисел. Компьютеры могут хранить и представлять все символы в их графической форме, присваивая каждому из них уникальный номер.

 [/vc_column_text][vc_column_text]Существовало так много стандартов или методов кодирования, которые все еще существовали и развивались задолго до появления UNICODE, и ASCII — один из них.Этот метод кодирования стал стандартом и был принят почти всеми современными языками.
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]

Как это началось?

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

Подробнее о UNICODE?

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

Стандарт поддерживается Консорциумом Unicode, и по состоянию на июнь 2017 года самая последняя версия Unicode 10.0 содержит набор из 136 755 символов, охватывающих 139 современных и исторических шрифтов, а также несколько наборов символов и эмодзи.

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

Языки, поддерживающие UNICODE

JAVA, TCL, Perl, Python, C# и почти все современные языки поддерживают эту систему кодирования.Здесь JAVA и Python являются одними из самых популярных языков, использующих этот стандарт кодирования. Если вам интересно узнать больше об этой теме, пожалуйста, обратитесь к ссылкам, приведенным в конце.
[/vc_column_text][vc_column_text]Источник (также найдите дополнительную информацию) : wikipedia , Дополнительная информация[/vc_column_text][/vc_column][/vc_row]

Преподавание, кодирование и совместное использование — его страсть. Настоящий наставник и мотиватор.C/C++, Python, Java, веб-технологии (html5/CSS/Javascript/JQuery, Bootstrap, nodeJS, PHP и т. д.) и энтузиаст WordPress с более чем двадцатилетним опытом.

Люди также читают

Текстовые кодировки – Учебники

В этой части мы рассмотрим следующие темы

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

Проблемы с кодировками UTF


Юникод решает некоторые проблемы с кодировками текста, а именно: проблемы с одновременным управлением несколькими различными кодировками в одном и том же документе или программном обеспечении.Объединение всех пространств кодирования в одно универсальное было очень хорошим шагом. К сожалению, числа из кодового пространства Unicode должны были быть каким-то образом закодированы, чтобы можно было манипулировать строками Unicode на цифровых машинах. Придуманная для этого случая кодировка UTF хоть и эффективно используется на практике, но вызывает массу проблем у тех, кто в них не разбирается.

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


Рассмотрим очень простой польский текст « Ala ma kota «, что на английском означает У Алисы есть кошка (файл string_001.txt, этот текст был одним из первых предложений, которые выучили читать в школе в Польше). Мы можем закодировать его с помощью UTF-8, сохранить в файл, а затем вычислить контрольную сумму MD5, которая должна быть 629d258a876ee994e9233b2ad87.


Рассмотрим тот же текст, также закодированный с помощью UTF-8, но сохраненный в файле со спецификацией (файл string_001_bom.текст). Следует четко заявить, что в обоих случаях мы видим на экране одно и то же предложение (например, в текстовом редакторе). Вычислите результаты контрольной суммы MD5 с помощью a599385d5405c236714eb4cface9420b, которая отличается от предыдущей. Если у нас нет априорной информации о том, что второй файл использует спецификацию, это может сбивать с толку. Мы можем попытаться использовать некоторые инструменты (например, http://w3c.github.io/xml-entities/unicode-names.html), чтобы печатать символ за символом вместе с их кодовыми точками и именами юникода, но это также не поможет. потому что оба результата должны быть одинаковыми

U + 0041 ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА A A U+006c ЛАТИНСКАЯ СТРОЧНАЯ БУКВА L l U + 0061 СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A a U+0020 ПРОБЕЛ \пробел U + 006d ЛАТИНСКАЯ СТРОЧНАЯ БУКВА M m U + 0061 СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A a U+0020 ПРОБЕЛ \пробел U+006b ЛАТИНСКАЯ СТРОЧНАЯ БУКВА K k U + 006f ЛАТИНСКАЯ СТРОЧНАЯ БУКВА O o U + 0074 СТРОЧНАЯ ЛАТИНСКАЯ БУКВА T t U + 0061 СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A a

U + 0041 Латинская столица A + 0041

U + 006C Латинская маленькая буква L L

U + 0061 Латинская маленькая буква A

U + 0020 Space \ Space

U + 006D Латинская маленькая буква M

U + 0061 Латинская маленькая буква A

U + 0020 Space \ Space

U + 006B Латинская маленькая буква K K

U + 006F Латинская маленькая буква O O

U + 0074 Латинская маленькая буква T T

U + 0061 СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A       a

Мы должны посмотреть на двоичную структуру, чтобы заметить наличие дополнительных байтов, кодирующих спецификацию (EF BB BF), которые влияют на расчетную контрольную сумму

Файл Строка
(видимый текст)
МД5 байт
(шестнадцатеричный)
строка_001.текст Ала ма кота 629d258a876ee994e9233b2ad87 41 6C 61 20 6D 61 20 6B 6F 74 61
string_001_bom.txt Ала ма кота а599385d5405c236714eb4cface9420b EF BB BF 41 6C 61 20 6D 61 20 6B 6F 74 61


Другая проблема может быть вызвана некоторыми невидимыми (непечатаемыми) символами. Рассмотрим тот же текст, также закодированный с помощью UTF-8, но сохраненный в файле без BOM string_002.текст. Например, может быть (не)преднамеренно добавлено ZERO WIDTH SPACE ( U+200B ). Хотя текст выглядит точно так же, как и раньше, контрольная сумма другая a3e420667ba7ac602cd0b23fbc59d0a6. Глядя на двоичную структуру, мы можем заметить дополнительные байты E2 80 8B

.
Файл Строка
(видимый текст)
МД5 байт
(шестнадцатеричный)
строка_001.txt Ала ма кота 629d258a876ee994e9233b2ad87 41 6C 61 20 6D 61 20 6B 6F 74 61
string_001_bom.текст Ала ма кота а599385d5405c236714eb4cface9420b EF BB BF 41 6C 61 20 6D 61 20 6B 6F 74 61
строка_002.txt Ала ма кота а3е420667ба7ас602кд0б23фбк59д0а6 41 6C 61 E2 80 8B 20 6D 61 20 6B 6F 74 61

Прежде чем предпринимать какие-либо действия с ними (например, удалять в шестнадцатеричном редакторе), полезно попытаться определить, для чего они используются. С помощью http://w3c.github.io/xml-entities/unicode-names.html мы можем увидеть лишний символ ПРОБЕЛ НУЛЕВОЙ ШИРИНЫ — мы можем безопасно удалить его в любом текстовом редакторе.

U + 0041 ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА A A U+006c ЛАТИНСКАЯ СТРОЧНАЯ БУКВА L l U + 0061 СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A a U+200b НУЛЕВАЯ ШИРИНА ПРОСТРАНСТВА &ZeroWidthSpace; &NegativeVeryThinSpace; &NegativeThinSpace; &NegativeMediumSpace; &NegativeThickSpace; U+0020 ПРОБЕЛ \пробел U + 006d ЛАТИНСКАЯ СТРОЧНАЯ БУКВА M m U + 0061 СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A a U+0020 ПРОБЕЛ \пробел U+006b ЛАТИНСКАЯ СТРОЧНАЯ БУКВА K k U + 006f ЛАТИНСКАЯ СТРОЧНАЯ БУКВА O o U + 0074 СТРОЧНАЯ ЛАТИНСКАЯ БУКВА T t U + 0061 СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A a

U+0041 ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА A     A

U+006c ЛАТИНСКАЯ СТРОЧНАЯ БУКВА L       l

U+0061 ЛАТИНСКАЯ СТРОЧНАЯ БУКВА A       a

U+200b SPeroWIDTH &NegativeVeryThinSpace; &NegativeThinSpace; &NegativeMediumSpace; &NegativeThickSpace;

U + 0020 Space \ Space

U + 006D Латинская маленькая буква M

U + 0061 Латинская маленькая буква A

U + 0020 Space \ Space

U + 006B Латинская маленькая буква K K

U + 006f СТРОЧНАЯ ЛАТИНСКАЯ БУКВА O       o

U+0074 СТРОЧНАЯ ЛАТИНСКАЯ БУКВА T       t

U+0061 СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A       a

Нас не должно удивлять, что этот текст, закодированный в UTF-16 и сохраненный с порядком байтов LE, приведет к другой контрольной сумме MD5 по сравнению с сохраненным с порядком байтов BE

Файл Строка
(видимый текст)
МД5 байт
(шестнадцатеричный)
строка_001.текст Ала ма кота 629d258a876ee994e9233b2ad87 41 6C 61 20 6D 61 20 6B 6F 74 61
string_001_bom.txt Ала ма кота а599385d5405c236714eb4cface9420b EF BB BF 41 6C 61 20 6D 61 20 6B 6F 74 61
строка_002.txt Ала ма кота а3е420667ба7ас602кд0б23фбк59д0а6 41 6C 61 E2 80 8B 20 6D 61 20 6B 6F 74 61
string_003_16_be.текст Ала ма кота 7560048d24bfde987177e418ca451f3a 00 41 00 6C 00 61 00 20 00 6D 00 61 00 20 00 6B 00 6F 00 74 00 61
string_003_16_le.txt Ала ма кота 9f6d7d6ede0a538f356d8c1f15b4ca38 41 00 6C 00 61 00 20 00 6D 00 61 00 20 00 6B 00 6F 00 74 00 61 00

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

Но и это не решает проблем. Теперь нам предстоит столкнуться с чем-то действительно сложным. Что означает символ ? Что пользователи воспринимают как одиночные символы? Конечные пользователи имеют разные представления о том, что представляет собой буква или символ в системе письма для их языка или языков. Точный объем этих символов конечного пользователя зависит от конкретного письменного языка и используемой орфографии.В дополнение ко многим экземплярам букв с акцентом они могут распространяться на орграфы , такие как словацкий ch , триграфы или более длинные комбинации и последовательности. Однако, несмотря на это разнообразие, основная концепция символов, которые должны храниться вместе , может быть определена независимым от языка способом. Эта основная концепция известна как кластер графем и состоит из любой последовательности комбинированных символов, которая содержит только комбинированные метки и любую последовательность символов.Знак объединения — это символ, который применяется к предшествующему базовому символу для создания графемы . Графема или символ — это минимально отличительная единица письма в контексте конкретной системы письма (мы можем назвать ее «буквой», если это поможет нам понять основы). Графема — это то, как пользователь думает о персонаже. Конкретное изображение графемы, отображаемое на экране, называется глиф .
Эти концепции хорошо иллюстрируются двумя примерами из Стандартной версии Unicode® 12.0 (локальная копия) (Рисунок 2.1 со страницы 11 и Рисунок 2.3 со страницы 17).


Обратите внимание, что сейчас мы говорим только о кодовых точках Unicode, полностью игнорируя то, как мы «упаковываем» эти коды (числа) в байты. Следующий уровень кодирования, такой как UTF, только добавит еще один уровень сложности. Юникод сам по себе достаточно сложен. Например, польская буква ± , называемая СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A С ОГОНЕКОМ , определяется одним значением U+0105 .Его также можно записать как простую букву a ( U+0061 ), называемую СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A , за которой следует ˛ ( U+0328 ), называемую ОБЪЕДИНЯЯ ОГОНЕК «чистый» ОГОНЕК ), сочетающий в себе диакритический крючок, помещаемый под правым нижним углом гласной. В обоих случаях отображается ± , и у пользователя может быть разумное ожидание, что обе строки будут не только равны друг другу, но также будут иметь длину одного символа, независимо от того, какой метод использовался для создания ± .Тест, сделанный на языке программирования Swift, подтверждает наши рассуждения ( count возвращает количество символов в строке)


Имея коды UTF, мы можем даже подготовить файл с двумя буквами ą — сначала как одно значение, второе вместе — сохраненное в UTF-8.
Кодировка Персонаж
U+0105 СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A С ОГОНЕК [1, 2] U+0061 СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A [1, 2] U+0328 ОБЪЕДИНЕНИЕ ОГОНЕКА [1, 2]
UTF-8 С4 85 61 СС А8
УТФ-16ВЕ 01 05 00 61 03 28
УТФ-16ЛЕ 05 01 61 00 28 03
УТФ-32БЕ 00 00 01 05 00 00 00 61 00 00 03 28
УТФ-32ЛЕ 05 01 00 00 61 00 00 00 28 03 00 00

Это также следует правильно интерпретировать, как показано на рисунке ниже


Продолжая этот тест, мы можем изучить кодировку UTF-8 и UTF-16.

Результаты string3.utf8.count = 3 и string3.utf16.count = 2 на первый взгляд могут сбить с толку, но оба легко объяснимы. Данные Unicode могут быть закодированы с различной шириной кодовой единицы — в случае UTF-8 это 8 бит, а в случае UTF-16 — 16 бит. Другими словами, при использовании UTF-8 мы подсчитываем 8-битные пакеты ( 61 CC A8 — первый: 61 , второй: CC и третий: A8 ), а при использовании UTF-16 мы подсчитываем 16-битные пакеты ( 00 61 CC A8 — первый: 00 61 и второй: CC A8 ).

Если у вас болит голова, имейте в виду, что польская буква ± — это «простой» падеж, а есть более сложные символы. Например, в языке йоруба есть символ ọ̀ , который можно записать тремя разными способами: составить ò с точкой , или составить с могилой , или составить o

 с обоими 
. могила и точка . И для последнего два диакритических знака могут быть в любом порядке, поэтому все они равны в человеческом смысле (поскольку все отображаются как ọ́ «буква»), но не в компьютерном смысле (поскольку все кодируются по-разному)

В этом случае Swift (или XCode IDE), похоже, имеет некоторые проблемы


Первые два символа отображаются правильно, а следующие два неверно.

Кодировка в UTF-8 (файл с четырьмя буквами ọ̀ stringY2 stringY5 так как они проверены в Swift)

Кодировка Символ
U+1ECD СТРОЧНАЯ ЛАТИНСКАЯ БУКВА O С ТОЧКОЙ НИЖЕ [1, 2] U+0300 ОБЪЕДИНЕНИЕ МОГИЛЬНОГО АКЦЕНТА [1, 2] U+00F2 СТРОЧНАЯ ЛАТИНСКАЯ БУКВА O С ГРАВОЙ [1, 2] U+0323 ОБЪЕДИНЕНИЕ ТОЧЕК НИЖЕ [1, 2] U+006F СТРОЧНАЯ ЛАТИНСКАЯ БУКВА O [1, 2]
UTF-8 Е1 ВВ 8D СС 80 С3 В2 СС А3 6F
УТФ-16ВЕ 1E CD 03 00 00 Ф2 03 23 00 6F
УТФ-16ЛЕ КД 1Е 00 03 Ф2 00 23 03 6F 00
УТФ-32БЕ 00 00 1E CD 00 00 03 00 00 00 00 F2 00 00 03 23 00 00 00 6F
УТФ-32ЛЕ CD 1E 00 00 00 03 00 00 Ф2 00 00 00 23 03 00 00 6F 00 00 00

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


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

Unicode определяет символы, используемые в разговорной/письменной речи, поэтому он также определяет графические элементы, которые не являются типичными лингвистическими символами, но, несмотря на это, используются в разговорах — хорошо известный emoji . Некоторые из них, такие как U+1F60A (😊) под названием УЛЫБАЮЩЕЕСЯ ЛИЦО С УЛЫБАЮЩИМСЯ ГЛАЗАМИ [1, 2], кодируются всего одной кодовой точкой:

.

U+1F60A Улыбающееся лицо с улыбающимися глазами Шестнадцатеричный код UTF-8 F0 9F 98 8A UTF-16BE D8 3D DE 0A UTF-16LE 3D D8 0A DE UTF-32BE 00 01 F6 0A UTF-32LE 0A F6 01 00

U + 1F60A Улыбающееся лицо с улыбающимися глазами

, кодирование Hex

UTF-8 F0 9F 98 8A,

UTF-16BE

UTF-16BE D8 3D DE 0A

UTF-16LED 3D D8 0A DE

UTF-32BE 00 01 F6 0A

UTF-32LE    0A F6 01 00

Сегодня мы можем использовать множество эмодзи, которые являются «составными эмодзи» — они закодированы как последовательность различных кодовых точек.Это пример графемы (и при отображении на экране — глифа), упомянутой ранее, — (одного) символа, состоящего из (многих) символов, которые следует держать вместе.
Например, смайлик Пара с сердцем: Женщина, Мужчина (👩‍❤️‍👨) представляет собой последовательность U+1F469 ЖЕНЩИНА (👩) [1, 2], U+2764 ТЯЖЕЛОЕ ЧЕРНОЕ СЕРДЦЕ ( ❤) [1, 2], за которыми следуют смайлики U+FE0F VARIATION SELECTOR-16 [1, 2] и U+1F468 MAN (👨) [1, 2], объединенные с помощью U+200D СОЕДИНИТЕЛЬ НУЛЕВОЙ ШИРИНЫ [1, 2] между каждым символом.Конечная последовательность: U+1F469 , U+200D , U+2764 , U+FE0F , U+200D и U+1F468 .

Некоторые эмодзи не отображаются непосредственно на комбинированном глифе, а используются в качестве модификатора для других эмодзи. Смайлик пожарный (🧑‍🚒) представляет собой последовательность смайликов U+1F9D1 ADULT (🧑) [2] и U+1F692 ПОЖАРНАЯ МАШИНА (🚒) [1, 2], объединенных с использованием U+200D ZERO WIDTH JOINER [1, 2] между каждым символом.Конечная последовательность: U+1F9D1 , U+200D , U+1F692 .

Смайлик

«Пожарный: темный тон кожи» (👨🏿‍🚒) представляет собой последовательность смайликов U+1F468 MAN (👨) [1, 2], U+1F3FF EMOJI MODIFIER FITZPATRICK TYPE-6 (🏿) [1 , 2] и U+1F692 ПОЖАРНАЯ МАШИНА (🚒) [1, 2] смайликов, объединенных с помощью U+200D СОЕДИНИТЕЛЬ НУЛЕВОЙ ШИРИНЫ [1, 2] между двумя последними символами. Конечная последовательность: U+1F9D1 , U+1F3FF , U+200D , U+1F692 .

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

. Эпизод 3.09 — Кодировка UTF-8 и кодовые точки Unicode — Расширенный носитель информации

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

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

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

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

В марте 2019 года Консорциум Unicode выпустил версию Unicode 12.0. Чтобы дать вам представление об обширности этого стандарта, он основывается на более ранних версиях, добавляя наборы символов, включая четыре новых сценария, используемых для написания языков, таких как исторический арамейский и санскрит, и 61 новый символ эмодзи, включая зевающее лицо, человека, использующего язык жестов. , собака-поводырь, скунс и спасательный жилет. 2 Юникод, кстати, сам по себе не является схемой кодирования. Юникод — это огромный набор символов, управляющих кодов и символов, которым присвоены идентификаторы. Эти идентификаторы называются кодовыми точками. В кодовом пространстве Unicode диапазон целых чисел, представляющих кодовые точки, простирается от 0 до 0x10FFFF, что позволяет использовать более миллиона кодовых точек. 3 Обычная запись для представления значения Unicode — это заглавная буква U, за которой следует знак плюс, за которым следует целое число в шестнадцатеричном формате.Обычно это шестнадцатеричное значение состоит из четырех цифр.

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

Одной из самых популярных современных схем кодирования является кодировка переменной ширины, называемая UTF-8. UTF-8, который является только одним из форматов преобразования Unicode, кодирует один миллион плюс возможных кодовых точек, определенных Unicode, в двоичные шаблоны из одного, двух, трех или четырех байтов, которые затем могут быть сохранены или переданы. Первый бит шаблона UTF-8 действует как флаг. Если этот флаг равен нулю, то следующие семь битов сохраняются как 7-битная кодировка ASCII. Сопоставляя первые 128 кодов с шаблонами, определенными 7-битным ASCII, UTF-8 правильно интерпретирует любые данные, закодированные в 7-битном ASCII, и, следовательно, является обратно совместимым.В качестве примечания, файлы HTML обычно хранятся в виде простого текста с использованием латинского алфавита. Это означает, что веб-страница, закодированная в UTF-8, будет передаваться в два раза быстрее, чем тот же файл, закодированный с помощью UTF-16 (двух- или четырехбайтная кодировка переменной длины), и в четверть времени, чем тот же файл, закодированный с UTF-32 (четырехбайтная кодировка с фиксированной шириной). 1

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

Например, двухбайтовый шаблон UTF-8 всегда имеет первый байт, начинающийся со 110, за которым следуют пять битов кода, и второй байт, начинающийся с 10, за которым следуют шесть битов кода. Это дает нам пять плюс шесть или одиннадцать битов для кодовой точки. 2 11 равно 2048, что означает, что существует 2048 возможных комбинаций единиц и нулей, которые можно использовать с двухбайтовым кодированием.Поскольку однобайтовое кодирование обрабатывает кодовые точки от 0 до 127, двухбайтовое кодирование обрабатывает кодовые точки от 128 до 2047 или от 0x80 до 0x7FF.

Трехбайтовый шаблон UTF-8 всегда имеет первый байт, начинающийся с 1110, за которым следуют четыре бита кодовой точки. Следующие два байта начинаются с 10, за которыми следуют шесть бит кода. Это оставляет четыре плюс шесть плюс шесть или шестнадцать битов для фактического кодирования. 2 16 равно 65 536, что означает, что существует 65 536 возможных комбинаций единиц и нулей, которые можно использовать с трехбайтным кодированием.Поскольку одно- и двухбайтовое кодирование обрабатывает кодовые точки от 0 до 2047, трехбайтовое кодирование обрабатывает кодовые точки от 2048 до 65535 или от 0x800 до 0xFFFF.

Четырехбайтовый шаблон UTF-8 всегда имеет первый байт, начинающийся с 11110, за которым следуют три бита кода. Каждый из следующих трех байтов начинается с 10, за которым следуют шесть битов кодовой точки. Это оставляет три плюс шесть плюс шесть плюс шесть или двадцать один бит для четырехбайтового кодирования. 2 21 равно 2 097 152, что означает, что существует 2 097 152 возможных шаблона единиц и нулей, которые можно использовать для кодирования.Поскольку одно-, двух- и трехбайтовые кодировки учитывают кодовые точки от 0 до 65 535, четырехбайтовая кодировка обрабатывает кодовые точки за пределами этого. В шестнадцатеричном формате Unicode размещает диапазон четырехбайтовых кодировок от 0x10000 до 0x10FFFF.

Обратите внимание, что для двух-, трех- и четырехбайтовых шаблонов UTF-8 каждый байт, следующий за начальным байтом, начинается с 10. Поскольку однобайтовый UTF-8 всегда начинается с 0 и двух-, трех- и четырехбайтных -байтовые шаблоны UTF-8 всегда начинаются с 11, невозможно принять один из последующих байтов за первый байт шаблона.Это позволяет нам быстро синхронизировать поток байтов в пределах одной кодовой точки в случае, если мы потеряли нашу позицию. 4 Это также означает, что мы можем получать байты в обратном порядке и по-прежнему декодировать сообщение, собирая байты, начинающиеся с 10, пока мы не получим байт, начинающийся с 11, который скажет нам, как интерпретировать данные. Нам просто нужно заранее знать, что байты будут отправлены в обратном порядке.

Пришло время привести несколько примеров. Во-первых, давайте посмотрим, как выглядит математический символ «больше или равно» в UTF-8.Начнем с определения его кода Unicode. Если мы перейдем к таблице кодов математических операторов Unicode, мы увидим, что шестнадцатеричный код для больше или равно равен 0x2265. 5 Изучив диапазоны одно-, двух-, трех- и четырехбайтовых шаблонов UTF-8, мы видим, что 0x2265 попадает в трехбайтовый диапазон, то есть от 0x800 до 0xFFFF. Это означает, что нам нужно заполнить шестнадцать доступных битовых позиций трехбайтового шаблона шестнадцатью младшими битами кодовой точки 0x2265, то есть 0010 0010 0110 0101.

Крайний правый байт трехбайтового шаблона будет занимать шесть младших значащих битов кодовой точки, которые в данном случае равны 100101. Это означает, что самый правый байт шаблона будет начинаться с 10, за ним следуют биты 100101, давая нам байт 0xA5. Далее мы смотрим на средний байт шаблона. Этот байт UTF-8 также будет начинаться с 10. Затем за 10 следуют следующие шесть младших битов кодовой точки, которые равны 001001. Это дает нам значение 0x89 для среднего байта.Самый старший байт UTF-8 начинается с 1110, за которым следуют четыре старших бита кодовой точки: 0010. Это дает нам значение 0xE2 для старшего байта шаблона UTF-8. Следовательно, шаблон UTF-8 для кодовой точки Unicode 0x2265 — это 0xE289A5.

В качестве второго примера рассмотрим кодировку UTF-8 0x32CF8072 и декодируем ее в символы кодовой точки Unicode. Двоичный шаблон первого байта, 0x32, равен 00110010, который начинается с нуля.Это означает, что шаблон UTF-8 является однобайтовым шаблоном и сопоставляется с 7-битными кодовыми точками ASCII. В ASCII 0x32 соответствует символу 2. Второй байт — это первый байт нашего следующего символа в кодировке UTF-8. 0xCF — это 11001111 в двоичном формате. Поскольку мы знаем, что любой шаблон UTF-8, начинающийся с 110, является двухбайтовым шаблоном, мы знаем, что представленная здесь кодовая точка представляет собой одиннадцатибитный шаблон между 0x80 и 0x7FF. Первые 5 бит этого одиннадцатибитного шаблона — это пять битов, следующих за 110 в 0xCF, то есть 01111.Последние шесть битов одиннадцатибитного шаблона — это последние шесть битов следующего байта, 0x80, которые равны 000000. Это означает, что двоичная кодовая точка Unicode, представленная шаблоном UTF-8 0xCF80, равна 01111000000, что равно 0x3C0. . Быстрый поиск кодов Unicode показывает, что это кодовая точка строчной греческой буквы «пи». Последний байт, 0x72, в двоичном формате равен 01110010. Поскольку первый бит равен нулю, мы знаем, что это снова 7-битный ASCII. В ASCII 0x72 — это строчная буква «r».Это означает, что четыре байта в нашем примере представляют 2πr в кодировке UTF-8.

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

В следующем эпизоде ​​мы рассмотрим совершенно другой вид кодирования: линейное кодирование. Кодирование строк определяет, как средства передачи представляют единицы и нули наших данных. Для получения расшифровок, ссылок или других заметок к подкастам, пожалуйста, зайдите на сайт intermation.com, где вы также найдете ссылки на наши страницы в Instagram, Twitter, Facebook и Pinterest. До следующего эпизода помните, что, хотя масштабы того, что делает компьютер, огромны, это всего лишь единицы и нули.

Каталожные номера:

  1. Разница между Unicode и UTF-8: http://www.differencebetween.net/technology/difference-between-unicode-and-utf-8/
  2. Стандартная версия Unicode 12.0 — основная спецификация: https://www. .unicode.org/versions/Unicode12.0.0/UnicodeStandard-12.0.pdf
  3. Глоссарий терминов Unicode: http://unicode.org/glossary/#code_point
  4. История Роба Пайка в UTF-8: https://www.

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

Ваш адрес email не будет опубликован.