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

Обновлено: 05.07.2024

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

Вопрос

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

Ответить

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

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

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

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

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

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

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

Возможно, вы не сможете увидеть некоторые символы на этой странице, потому что у вас нет необходимых шрифтов. Если вы нажмете на то место, где вы ожидали увидеть символ, вы перейдете к графической версии. Эта страница закодирована в 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.

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

Кодировка символов сопоставляет каждый символ в наборе символов с числовым значением, которое может представить компьютер. Эти числа могут быть представлены одним байтом или несколькими байтами. Например, кодировка ASCII использует 7 бит для представления латинского алфавита, знаков пунктуации и управляющих символов.
Вы используете японские кодировки, такие как Shift-JIS, EUC-JP и ISO-2022-JP, для представления японского текста. Эти кодировки могут немного различаться, но они включают в себя общий набор примерно из 10 000 символов, используемых в японском языке.
К кодировкам символов применяются следующие термины:

  • SBCS Однобайтовый набор символов; набор символов, закодированный одним байтом на символ, например ASCII или ISO 8859-1.
  • DBCS Двухбайтовый набор символов; метод кодирования набора символов не более чем в 2 байта, например Shift-JIS. Многие схемы кодирования символов, называемые двухбайтовыми, включая Shift-JIS, позволяют смешивать однобайтовые и двухбайтовые закодированные символы. Другие, такие как UCS-2, используют 2 байта для всех символов.
  • MBCS Многобайтовый набор символов; набор символов, закодированный переменным числом байтов на символ, например UTF-8. В следующей таблице перечислены некоторые распространенные кодировки символов; однако браузеры и веб-серверы поддерживают множество дополнительных кодировок символов:

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

16-битная японская кодировка. Примечание. Используйте символ подчеркивания (_), а не дефис (-) в имени в атрибутах CFML.

16-битная корейская кодировка

Двухбайтовая кодировка Unicode

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

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

ColdFusion использует стандарт Java Unicode для внутреннего представления символьных данных. Этот стандарт соответствует кодировке UCS-2 набора символов Unicode. Набор символов Unicode может представлять многие языки, включая все основные европейские и азиатские наборы символов. Таким образом, ColdFusion может получать, хранить, обрабатывать и представлять текст на всех языках, поддерживаемых Unicode.
Виртуальная машина Java (JVM), которая используется для обработки страниц ColdFusion, преобразует кодировку символов, используемую на странице ColdFusion или другом источнике информации, в UCS-2. Кодировки страниц или данных, которые поддерживает ColdFusion, зависят от конкретной JVM, но включают в себя большинство кодировок, используемых в Интернете. Точно так же JVM выполняет преобразование между своим внутренним представлением UCS-2 и кодировкой символов, используемой для отправки ответа клиенту.
По умолчанию ColdFusion использует кодировку UTF-8 для представления текстовых данных, отправляемых в браузер. UTF-8 представляет набор символов Unicode с использованием кодировки переменной длины. Символы ASCII отправляются с использованием одного байта. Большинство европейских и ближневосточных символов отправляются как 2 байта, а японские, корейские и китайские символы отправляются как 3 байта. Одним из преимуществ UTF-8 является то, что он отправляет данные набора символов ASCII в форме, распознаваемой системами, предназначенными для обработки только однобайтовых символов ASCII, и в то же время он достаточно гибок для обработки многобайтовых представлений символов.
Хотя формат текстовых данных, возвращаемых ColdFusion по умолчанию, — UTF-8, вы можете заставить ColdFusion возвращать страницу с любым набором символов, поддерживаемым Java. Например, вы можете вернуть текст, используя набор символов Shift-JIS для японского языка. Точно так же ColdFusion может обрабатывать данные, содержащие множество различных наборов символов. Дополнительную информацию см. в разделе Определение кодировки страницы вывода сервера в разделе Обработка запроса в ColdFusion.

Проблемы преобразования кодировки символов

Поскольку разные кодировки символов поддерживают разные наборы символов, вы можете столкнуться с ошибками, если ваше приложение получает текст в одной кодировке и представляет его в другой кодировке. Например, кодировка символов Windows Latin-1, Windows-1252, включает символы с шестнадцатеричным представлением в диапазоне 80-9F, тогда как ISO 8859-1 не включает символы в этом диапазоне. В результате при следующих обстоятельствах символы в диапазоне 80-9F, такие как символ евро (), отображаются неправильно:

Один бит может иметь 2 возможных состояния. 2 1 =2. 0 или 1.
Два бита могут иметь 4 возможных состояния. 2 2 =4. 00,01,10,11. (т.е. 0-3)
Четыре бита могут иметь 16 возможных состояний. 2 4 =16. 0000,0001,0010,0011 и т. д. (т.е. 0-15)
Семь битов могут иметь 128 возможных состояний. 2 7 =128. 0000000,0000001,0000010 и т. д. (т.е. 0-127).
Восемь битов могут иметь 256 возможных состояний. 2 8 =256. 00000000,00000001,00000010 и т. д. (например, 0–255).

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

Общий код, используемый для символов с диакритическими знаками, — Quoted-Printable. Любые расширенные символы (больше 127) кодируются строкой из трех символов. Например, é = E9. 8BIT (по сути, несжатые символьные данные) также является допустимым кодом MIME и сегодня является наиболее распространенным способом отправки символов с диакритическими знаками.

Чтобы код работал на двух разных машинах с разными операционными системами и разными встроенными наборами символов, мы все должны согласовать стандартные наборы символов, в которые мы будем переводить. Международная организация по стандартизации (ISO) установила такие стандарты. Например, стандартный набор символов для западноевропейских языков — ISO-LATIN-I (или ISO-8859-1). Но пока компьютер знает, какой набор символов используется, его можно запрограммировать на перевод и отображение этих символов, независимо от того, какой у компьютера собственный набор символов. é — это 130-й символ в ISO-LATIN-I.

Программа электронной почты, совместимая с MIME, будет использовать заголовки электронной почты, чтобы отслеживать, какой набор символов и схема кодирования применяются к каждому сообщению электронной почты. Веб-браузер сделает то же самое. Это позволяет программе преобразовывать и знать, как отображать символы на любом заданном компьютере, поэтому вся система кодирования прозрачна (пользователь не замечает) для пользователя.Для MIME Quoted-Printable на западноевропейских языках эти заголовки могут выглядеть так:

    X-Mailer: QUALCOMM Windows Eudora версии 5.1
    Mime-версия: 1.0
    Тип контента: текстовый/обычный; charset=iso-8859-1
    Content-transfer-encoding: quoted-printable

И эти же заголовки MIME также используются на веб-страницах, чтобы веб-браузер, такой как Internet Explorer, Chrome или Firefox, знал, как отображать каждую страницу, независимо от того, где она была создана и где находится. просмотрено. Пока компьютер знает, какой набор символов представлен, он знает, какие символы отображать.

Клавиатуры

Вы также должны в первую очередь ввести символы в компьютер. Windows и Mac уже давно позволяют делать это с помощью сочетаний клавиш. Лучший способ ввода символов в Windows — это выбрать раскладку клавиатуры, которая включает символы, которые вы хотите ввести. Для ввода западноевропейских языков на американской клавиатуре самым безопасным и простым в использовании вариантом, если вы уже знаете, как печатать на американской клавиатуре, является международная клавиатура США. В Windows 7, 8, 10 найдите вкладку «Клавиатуры и языки» на панели управления «Регион и язык», чтобы изменить или добавить клавиатуру. Хотя многие программы могут иметь встроенные сочетания клавиш, преимущество использования клавиатуры в операционной системе (Windows, Mac) заключается в том, что она будет работать для всех программ.

Интерактивную справку по клавиатуре см.:

Справка по клавиатуре

Неанглийские клавиатуры Windows 7 ; Общие для Windows и Mac; Windows 10

Учебник по проблемам с кодами символов

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 такой, какой он есть.Очень впечатляюще, и он очень много сделал для Интернета, каким мы его знаем.

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

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

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