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

Обновлено: 07.07.2024

ASCII и UTF-8 – две современные системы кодирования текста. И то, и другое объясняется в этом видео с участием Кейтлин Мерри.

В 1963 году был принят Американский стандартный код для обмена информацией, или ASCII, чтобы информацию можно было переводить между компьютерами. Он был разработан для создания международного стандарта кодирования латинского алфавита; превращая двоичные числа в текст на экране вашего компьютера. ASCII кодирует символы в семь битов двоичных данных. Поскольку каждый бит может быть либо 1, либо 0, всего получается 128 возможных комбинаций. Каждое из этих двоичных чисел можно преобразовать в десятичное число от 0 до 127. Например, 1000001 в двоичном формате равняется 65 в десятом. В ASCII каждое десятичное число соответствует символу, который мы хотим закодировать. От прописных и строчных букв до цифр, символов и компьютерных команд.

Ошибки в преобразовании японских иероглифов стали такой проблемой, что у них даже есть название для этого — модзибаке. Эта проблема стала намного хуже с изобретением всемирной паутины. Для решения проблем, связанных с отправкой документов на разных языках по всему миру, был создан консорциум для создания всемирного стандарта Unicode. Как и в ASCII, в Unicode каждому символу присваивается определенный номер. Unicode также использует старую кодировку ASCII для английского языка. Таким образом, A в верхнем регистре по-прежнему равен 65. Но Unicode кодирует гораздо больше, чем 100 000 символов в большинстве языков. Для этого он использует не 8 бит данных, а 32. Но 65, закодированные в 32 бита, выглядят так, что занимает много места.

Кроме того, многие старые компьютеры интерпретируют восемь нулей подряд как конец строки символов, также называемый нулем. Это означает, что они не будут отправлять никаких символов, которые появятся позже. Метод кодирования Unicode, UTF8, решает эти проблемы. Вплоть до номера 127 значение ASCII остается неизменным. Так что A по-прежнему 01000001. Для всего, что выше 127, UTF8 разделяет код на два байта. Он добавляет 110 к первому байту и 10 ко второму байту. Затем вы просто заполняете двоичный код для промежуточных битов. Например, число 325 равно 00101000101, которое вставляется вот так. Это работает для первых 4096 символов. После этого добавляется еще один байт.

Поделиться этой публикацией

Два стандарта кодирования символов определяют, как символы декодируются из единиц и нулей в текст, который вы видите на экране прямо сейчас, и в различные языки, просматриваемые каждый день во всемирной паутине. Этими двумя стандартами кодирования являются ASCII и Unicode.

ASCII

Американский стандартный код для обмена информацией (ASCII) был разработан для создания международного стандарта кодирования латинского алфавита. В 1963 году был принят ASCII, чтобы информацию можно было интерпретировать между компьютерами; представляющие строчные и заглавные буквы, цифры, символы и некоторые команды. Поскольку ASCII кодируется с использованием единиц и нулей, системы счисления с основанием 2, он использует семь битов. Семь бит позволяют 2 в степени 7 = 128 возможных комбинаций цифр для кодирования символа.

Поэтому ASCII гарантирует, что можно закодировать 128 важных символов:

Хотите продолжать
учиться?

Представление данных в вычислениях: оживление данных

Как работает кодировка ASCII

  • Вы уже знаете, как преобразовывать десятичные числа в двоичные.
  • Теперь вам нужно преобразовать буквы в двоичные числа.
  • Каждому символу соответствует десятичное число (например, A → 65).
  • ASCII использует 7 бит.
  • Мы используем первые 7 столбцов таблицы преобразования, чтобы создать 128 различных чисел (от 0 до 127)

Например, 1000001 дает нам число 65 ( 64 + 1 ), что соответствует букве «А».

Вот как «HELLO» закодировано в ASCII в двоичном формате:

< /tr> < /tbody>
Латинские символы ASCII
H 1001000< /td>
E 1000101
L 1001100
L 1001100
O 1001111

Давайте применим эту теорию на практике:

  1. Откройте Блокнот или любой другой текстовый редактор.
  2. Введите сообщение и сохраните его, например. "данные прекрасны"
  3. Посмотрите на размер файла — у меня 18 байт
  4. Теперь добавьте еще одно слово, например "данные такие красивые"
  5. Если вы еще раз посмотрите на размер файла, вы увидите, что он изменился — теперь мой файл стал на 3 байта больше (SO[ПРОБЕЛ]: «S», «O» и пробел)

Юникод и UTF-8

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

  1. Для кодирования 100 000 символов потребуется около 32 двоичных разрядов. Unicode использует ASCII для английского языка, поэтому A по-прежнему равно 65. Однако при 32-битной кодировке буква A будет двоичным представлением 0000000000000000000000000000000000001000001. Это тратит много драгоценного места!
  2. Многие старые компьютеры интерпретируют восемь нулей подряд (ноль) как конец строки символов. Таким образом, эти компьютеры не будут отправлять символы, следующие за восемью нулями подряд (они не будут отправлять букву A, если она представлена ​​как 0000000000000000000000000000000000001000001).

Метод кодирования Unicode UTF-8 решает следующие проблемы:
– До символа с номером 128 используется обычное значение ASCII (так, например, A равно 01000001)
– Для любого символа после 128, UTF-8 разделяет код на два байта и добавляет «110» к началу первого байта, чтобы показать, что это начальный байт, и «10» к началу второго байта, чтобы показать, что он следует за первым байтом.

Итак, для каждого символа после числа 128 у вас есть два байта:

И вы просто вводите двоичное число между ними:

Это работает для первых 2048 символов. Для других символов в начале первого байта добавляется еще одна «1», а также используется третий байт:

Это дает вам 16 пробелов для двоичного кода. Таким образом, UTF-8 достигает четырех байтов:

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

Занятия в классе

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

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

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

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

Вопрос

Что такое кодировка символов и зачем мне это?

Ответить

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

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

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

но на самом деле это может выглядеть так:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Дополнительная информация

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

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

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

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

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

В наши дни байты обычно состоят из 8 бит. Существует только 2 8 (т.е. 256) уникальных способов объединения 8 битов.

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

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

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

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

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

Дополнительная литература

Начинаете? Введение в наборы символов и кодировки — указывает на другие документы W3C, связанные с наборами символов и кодировками

Учебное пособие, Работа с кодировками символов в HTML и CSS. Советы по выбору кодировки, ее объявлению и другим темам, связанным с HTML и CSS.

Настройка кодировки в веб-приложениях для разработки — как заставить ваш редактор сохранять в другой кодировке список сред редактирования.

Как мы все знаем, компьютеры не понимают английский алфавит, числа, кроме 0 и 1, или текстовые символы. Мы используем кодирование для их преобразования. Итак, кодирование — это метод или процесс преобразования последовательности символов, т. е. букв, цифр, знаков препинания и символов, в специальный или уникальный формат для передачи или хранения в компьютерах. Данные представлены в компьютерах с использованием схем кодирования ASCII, UTF8, UTF32, ISCII и Unicode. Компьютеры могут обрабатывать все типы данных, включая числа, текст, фотографии, аудио- и видеофайлы. Например, 65 представляется как A, потому что всем символам, символам, числам присваивается некоторый уникальный код стандартными схемами кодирования. Некоторые из часто используемых схем кодирования описаны ниже:

  1. Непечатаемый, системные коды от 0 до 31.
  2. Меньший ASCII, от 32 до 127.
  3. Высший ASCII, от 128 до 255.
<р>2. ISCII: ISCII (индийский код письма для обмена информацией) — это аббревиатура индийского алфавитного кода для обмена информацией. ISCII — это метод кодирования, который можно использовать для кодирования широкого спектра индийских языков, как письменных, так и устных. Чтобы упростить транслитерацию между несколькими системами письма, ISCII использует единый механизм кодирования.

  1. Здесь представлено подавляющее большинство индийских языков.
  2. Набор символов прост и понятен.
  3. Между языками можно легко транслитерировать.
  1. Требуется специальная клавиатура с символьными клавишами ISCII.
  2. Поскольку Unicode был создан позже, а Unicode включал в себя символы ISCII, ISCII устарел. ISCII (код индийской письменности для обмена информацией) – это код индийской письменности для обмена информацией.
  3. ISCII – это метод кодирования, с помощью которого можно кодировать широкий спектр индийских языков, как письменных, так и устных. Чтобы упростить транслитерацию между несколькими системами письма, ISCII использует единый механизм кодирования.
  1. Юникод позволяет создавать единый программный продукт или веб-сайт для нескольких платформ, языков и стран (без переделки), что приводит к значительной экономии средств по сравнению со старыми наборами символов.
  2. Данные Unicode можно использовать без повреждения данных в различных системах.
  3. Юникод – это универсальный метод кодирования, который можно использовать для кодирования любого языка или буквы независимо от устройства, операционной системы или программного обеспечения.
  4. Юникод – это стандарт кодировки символов, который позволяет выполнять преобразование между несколькими системами кодировки символов. Поскольку Юникод является расширенным набором всех других основных систем кодировки символов, вы можете преобразовать одну схему кодировки в Юникод, а затем из Юникода в другую схему кодировки.
  5. Наиболее широко используемой кодировкой является Юникод.
  6. Применимые версии стандарта ISO/IEC 10646, определяющего кодировку символов универсального набора символов, полностью совместимы и синхронизированы с версиями стандарта Unicode. Или мы можем сказать, что он включает 96 447 кодов символов, которых достаточно для декодирования любого символа, присутствующего в мире.
<р>5. UTF-32: UTF-32 известен как 32-битный формат преобразования Unicode. Это кодировка фиксированной длины, которая кодирует кодовые точки Unicode, используя 32 бита на код. Он использует 4 байта на символ, и мы можем подсчитать количество символов в строке UTF-32, просто подсчитав байты. Основное преимущество использования UTF-32 заключается в том, что кодовые точки Unicode могут быть проиндексированы напрямую (хотя буквы в целом, такие как «кластеры графем» или некоторые эмодзи, не могут быть проиндексированы напрямую, поэтому определение отображаемой ширины строки является более сложным) . Операцией с постоянным временем является нахождение N-й кодовой точки в последовательности кодовых точек. С другой стороны, код переменной длины требует последовательного доступа для нахождения N-й кодовой точки в строке.В результате UTF-32 является простой заменой кода ASCII, который проверяет каждую проблему в строке, используя числа, увеличивающиеся на единицу.

Kealan Parr

Килан Парр

Символы Unicode — Что Каждый разработчик должен знать о кодировании

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

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

Введение в кодирование

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

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

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

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

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

ASCII – это преобразование двоичных символов в буквенно-цифровые. Итак, когда ПК получает двоичный файл:

С помощью ASCII это можно перевести как "Hello world".

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

Но управляющими символами были такие вещи, как 7 (111 в двоичном формате), которые издавали звук колокольчика на вашем ПК, 8 (1000 в двоичном формате), который печатался поверх последнего только что напечатанного символа, или 12 (1100 в двоичном формате). это очистит видеотерминал от всего только что написанного текста.

Компьютеры в то время использовали 8 бит для одного байта (и не всегда), так что проблем не было. Мы могли бы сохранить все наши управляющие символы, все наши числа, все английские символы и еще немного! Потому что один байт может кодировать 255 символов, а ASCII нужно всего 127 символов. Таким образом, у нас было 128 неиспользованных кодировок.

Давайте посмотрим на таблицу ASCII, чтобы увидеть каждый символ. Все строчные и прописные буквы A-Z и 0-9 были закодированы в двоичные числа. Помните, что первые 32 – непечатаемые управляющие символы.

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

image- 172

Вы видите, как оно заканчивается на 127? У нас есть свободная комната в конце.

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

Американский национальный институт стандартов (ANSI — не путайте с ASCII) – это орган по стандартизации, устанавливающий стандарты во множестве различных областей. Они решили, что все делают с 0-127, что уже делал ASCII. Но остальные были открыты.

Никто не обсуждал, что такое 0-127 в кодировке ASCII. Проблема была с запасными.

image-169

Некоторые волнистые линии, несколько фоновых значков, математические операторы и некоторые символы с диакритическими знаками, такие как é.

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

Эти разные окончания для ASCII назывались кодовыми страницами.

Что такое кодовые страницы ASCII?

Вот коллекция из более чем 465 различных кодовых страниц! Вы можете видеть, что было несколько кодовых страниц ДАЖЕ для одного и того же языка. Например, греческий и китайский языки имеют несколько кодовых страниц.

Так как же мы вообще собирались стандартизировать это? Или заставить его работать между разными языками? Между одним и тем же языком с разными кодовыми страницами? На неанглийском языке?

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

У этой проблемы даже есть свой термин: моджибаке.

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

image- 171

Пример полностью искаженного текста (модзибаке).

Это звучит немного безумно.

Точно! У нас не будет никаких шансов надежного обмена данными.

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

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

��� Если только вы ������ не пытались ��� ��� читать подобные абзацы. �֎֏0590֐��׀ׁׂ׃ׅׄ׆ׇ

Появился Юникод

Юникод иногда называют универсальным набором кодированных символов (UCS) или даже ISO/IEC 10646. Но Unicode – более распространенное название.

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

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

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

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

"Привет, мир"

U+0048 : ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА H
U+0065 : ЛАТИНСКАЯ СТРОЧНАЯ БУКВА E
U+006C : ЛАТИНСКАЯ СТРОЧНАЯ БУКВА L
U+006C : ЛАТИНСКАЯ СТРОЧНАЯ БУКВА L
U+006F : СТРОЧНАЯ ЛАТИНСКАЯ БУКВА O
U+0020 : ПРОБЕЛ [SP]
U+0057 : ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА W
U+006F : ЛАТИНСКАЯ СТРОЧНАЯ БУКВА O
U +0072 : ЛАТИНСКАЯ СТРОЧНАЯ БУКВА R
U+006C : ЛАТИНСКАЯ СТРОЧНАЯ БУКВА L
U+0064 : ЛАТИНСКАЯ СТРОЧНАЯ БУКВА D

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

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

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

Есть еще один ингредиент, который нам нужно добавить в нашу смесь.

Протокол преобразования Unicode (UTF)

UTF — это способ кодирования кодовых точек Unicode. Кодировки UTF определяются стандартом Unicode и могут кодировать каждую необходимую кодовую точку Unicode.

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

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

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

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

Что такое UTF-8 и как это работает?

UTF-8 кодирует все кодовые точки Unicode от 0 до 127 в 1 байте (аналогично ASCII). Это означает, что если вы кодируете свою программу с помощью ASCII, а ваши пользователи используют UTF-8, они не заметят ничего неправильного. Все бы просто работало.

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

Поскольку это называется UTF-8, помните, что это минимальное количество битов (8 бит - это один байт!), которым может быть кодовая точка.Существуют и другие символы Юникода, которые хранятся в нескольких байтах (до 6 байтов в зависимости от символа). Это то, что люди имеют в виду, когда кодирование называется переменной длиной.

Может быть и больше, в зависимости от языка. Английский - 1 байт. Европейский (латиница), иврит и арабский язык представлены 2 байтами. 3 байта используются для китайских, японских, корейских и других азиатских символов. Вы поняли.

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

И теперь, как ни странно, мы все можем согласиться с кодировкой шумерских клинописных знаков (𒀵 𒁷𒂅 𒐤), а также с некоторыми смайликами 😉😉, чтобы мы все могли общаться!

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

Заключительное слово о UTF

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

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

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

Если HTML-документ не содержит тега кодировки, в спецификации HTML5 есть несколько интересных способов угадать кодировку, называемую анализом спецификации. Именно здесь он угадывает кодировку по метке порядка байтов (BOM), которую мы обсуждали ранее.

Так это оно?

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

Обычно выходит 1 или 2 релиза в год, и вы можете найти их здесь.

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

Если вы дочитали до этого места, примите наши поздравления — вам предстоит многое переварить.

Я бы посоветовал вам сделать последнее домашнее задание.

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

Это помогает понять, насколько важно кодирование на самом деле.

image-164

Заключение

За время, потраченное на изучение и попытки упростить эту статью, я узнал о Майкле Эверсоне. С 1993 года он предложил более 200 изменений Unicode и добавил в стандарт тысячи символов. По состоянию на 2003 год он считался ведущим автором предложений Unicode. Он — одна из главных причин, почему Unicode такой, какой он есть. Очень впечатляюще, и он очень много сделал для Интернета, каким мы его знаем.

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

Если вам понравилась эта статья и вы хотите увидеть больше, я делюсь своим текстом в Твиттере.

Читайте также: