Как текст кодируется на компьютере

Обновлено: 21.11.2024

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

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

2.3.1 Абстрактные символы

Персонаж — это абстрактная атомарная единица коммуникации. Например, буква Q — это символ английского языка.

Символы и глифы — это разные понятия. Глиф — это особое изображение, представляющее символ или часть символа. Для обозначения одного и того же символа может использоваться множество глифов; например, QQQQ Q. Несмотря на узнаваемые различия, все эти глифы представляют один и тот же абстрактный символ Q. Точно так же некоторые символы представлены разными глифами в зависимости от контекста, например, в изолированном, начальном, среднем или конечном положении. /p>

2.3.2 Наборы символов

Набор символов (или набор абстрактных символов) — это неупорядоченный набор символов. Набор определяется соглашением, таким как система письма или публикация стандарта. Примеры наборов символов включают западноевропейские алфавиты и символы Latin-1, набор переносимых символов POSIX, набор символов Западной Европы Windows, японские слоговые письма и иероглифы JIS X 02081 и т. д.

2.3.3 Наборы кодированных символов

Набор закодированных символов (также называемый кодировкой символов, репертуаром закодированных символов или кодовой страницей) – это сопоставление набора абстрактных символов с набором неотрицательных целых чисел. Результатом является набор закодированных символов, которые могут быть численно представлены в компьютере. Диапазон целых чисел не обязательно должен быть непрерывным. Примеры кодированных наборов символов включают ISO/IEC 8859-1 (Latin-1), кодовую страницу Windows 1252 (тот же репертуар, что и 8859-1), стандарт Unicode и т. д.

Целое число, связанное с абстрактным символом в закодированном наборе символов, называется точкой кода символа.

2.3.4 Формы кодирования символов

Для представления символов на компьютере каждая кодовая точка в кодированном наборе символов должна быть сопоставлена ​​с последовательностью битов. Это сопоставление называется формой кодировки символов.

Единица кода — это основная двоичная разрядность, используемая в архитектуре компьютера для представления символьных данных, например 7, 8, 16 или 32 бита. В зависимости от используемой формы кодировки символов каждая кодовая точка в кодированном наборе символов может быть представлена ​​внутри одной или несколькими такими кодовыми единицами.

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

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

Примеры форм кодировки символов включают:

US ASCII, 7-битная форма кодирования фиксированной ширины

Shift-JIS, 16-битная форма кодирования переменной ширины для JIS X 0208

UTF-16, 16-битная кодировка переменной ширины для Unicode 3.0

UTF-32, 32-битная форма кодирования фиксированной ширины для Unicode 3.0

2.3.5 Схемы кодирования символов

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

Схемы кодирования символов необходимы для межплатформенной устойчивости с использованием кодовых единиц шире байта. Большинство форм кодирования с фиксированной шириной, ориентированных на байты, имеют тривиальное преобразование единиц кода в байты. Большинство форм кодирования смешанной ширины, ориентированных на байты, просто сериализуют последовательность кодовых единиц. Формы кодирования с 16-битными или 32-битными единицами кода требуют схем, определяющих порядок байтов.

Например, форма кодировки символов UTF-16 для Unicode 3.0 имеет две схемы кодирования символов, UTF-16BE и UTF-16LE, которые определяют, сериализуются ли два байта, используемые для представления кодовых единиц UTF-16, в формате с обратным порядком байтов. или формат с прямым порядком байтов соответственно.

2.3.6 Карта символов

Полное преобразование абстрактных символов в кодовые точки, в единицы кода и в байты (см. разделы с 2.3.2 по 2.3.5) называется картой символов. Таким образом, карта символов неявно включает набор закодированных символов, форму кодировки символов и схему кодирования символов.

Идентификаторы наборов символов, признанные Управлением по присвоению номеров в Интернете (IANA), относятся к картам символов.

Авторское право © Rogue Wave Software, Inc. Все права защищены.

Название и логотип Rogue Wave, а также SourcePro являются зарегистрированными товарными знаками Rogue Wave Software. Все остальные товарные знаки являются собственностью соответствующих владельцев.
Свяжитесь с Rogue Wave по вопросам документации или поддержки.

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

Что такое кодировка?

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

Что такое текст?

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

Краткое введение в Юникод

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

«Юникод – это отраслевой стандарт компьютерной техники для единообразного кодирования, представления и обработки текста, выраженного в большинстве систем письменности мира. Стандарт поддерживается Консорциумом Unicode, и по состоянию на май 2019 г. самая последняя версия Unicode 12.1 содержит репертуар из 137 994 символов, охватывающих 150 современных и исторических шрифтов, а также несколько наборов символов и эмодзи.

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

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

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

Итак, как работает кодирование?

Хорошо, давайте перейдем к мельчайшим деталям. Что на самом деле сохраняется при сохранении текстового файла? Во-первых, мы рассмотрим одну из самых старых и простых кодировок — ASCII. Вот выдержка из статьи Википедии для ASCII:

«Первоначально основанный на английском алфавите, ASCII кодирует 128 указанных символов в семибитные целые числа, как показано на приведенной выше диаграмме ASCII.Печатаемы 95 закодированных символов: к ним относятся цифры от 0 до 9, строчные буквы от a до z, прописные буквы от A до Z и знаки препинания. Кроме того, исходная спецификация ASCII включала 33 непечатаемых управляющих кода, созданных телетайпами; большинство из них сейчас устарели, хотя некоторые из них все еще широко используются, например возврат каретки, перевод строки и коды табуляции».

Поскольку ASCII был разработан в США и основан на английском алфавите, он содержит только стандартные английские символы. Это означает, что текст, содержащий неанглийские символы (например, буквы с акцентом или специальные буквы, используемые в других языках), не может быть точно закодирован в ASCII без замены специальных символов на стандартные английские. ASCII был разработан с использованием 7-битных кодов для представления закодированных им символов, но поскольку все современные компьютеры используют байты (8 бит) в качестве наименьшей единицы памяти, символы ASCII теперь хранятся с использованием 8 бит на символ. Первый бит просто не используется.

Весь стандарт кодирования ASCII выглядит следующим образом:

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

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

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

Это основы работы кодирования. В следующей части серии мы рассмотрим несколько различных кодировок и их отличия друг от друга, которые вы можете найти здесь: Кодировка 101 — Часть 2.

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

Вопрос

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

Ответить

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

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

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

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

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

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

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

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

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

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

Медиафайлы часто кодируются для экономии места на диске. Кодируя цифровые аудио-, видео- и графические файлы, их можно сохранить в более эффективном сжатом формате. Закодированные мультимедийные файлы, как правило, аналогичны по качеству исходным несжатым аналогам, но имеют гораздо меньший размер файлов. Например, аудиофайл WAVE (.WAV), преобразованный в файл MP3 (.MP3), может иметь размер, равный 1/10 исходного файла WAVE. Точно так же сжатый видеофайл MPEG (.MPG) может занимать лишь часть дискового пространства по сравнению с исходным цифровым видеофайлом (.DV).

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

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

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

Технический фактор

Подпишитесь на бесплатную рассылку новостей TechTerms

Спасибо

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

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