Utf 8 для чего нужен

Кодировка UTF – основной стандарт текста в интернете

Нужно правильно раскодировать сигналы, которые наш мозг получает из окружающей среды. Проще говоря, следует правильно « настроить » свой взгляд на жизнь. Ну, вроде не полупустой кошелек, а наполовину полный. То есть, требуется использовать нужную кодировку. Для интернета чаще всего правильной является кодировка utf :

Utf 8 для чего нужен. kodirovka utf 271129. Utf 8 для чего нужен фото. Utf 8 для чего нужен-kodirovka utf 271129. картинка Utf 8 для чего нужен. картинка kodirovka utf 271129

Немного о кодировках

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

Но передача текста в цифровом формате происходит совсем иначе, чем у нас на экране. Для перевода текста в машинный код используется двоичная система исчисления, состоящая лишь из 0 и 1.

Utf 8 для чего нужен. nemnogo o kodirovkah 271129. Utf 8 для чего нужен фото. Utf 8 для чего нужен-nemnogo o kodirovkah 271129. картинка Utf 8 для чего нужен. картинка nemnogo o kodirovkah 271129

Чаще всего нужно всего лишь поменять кодировку веб-страницы на кодировку utf8. Ведь она является наиболее распространенной во всем интернете.

Кодировка UTF-8

Наиболее распространенная среди стандартизированных и общепринятых текстовых кодировок. Расшифровывается как « восьмибитный формат преобразования Юникода » или « Unicode Transformation Format ».

Стандарт был разработан еще в 1992 году. В настоящее время он широко применяется не только во всемирной паутине, но и на прикладном уровне ( локальные машины и операционные системы ). Основным достоинством кодировки является ее совместимость с ASCII:

Utf 8 для чего нужен. kodirovka utf 8 271129. Utf 8 для чего нужен фото. Utf 8 для чего нужен-kodirovka utf 8 271129. картинка Utf 8 для чего нужен. картинка kodirovka utf 8 271129

ASCII («American standard code for information interchange») еще одна (но более старая) кодировка представления текстовых данных. В ее таблице символов значения печатных и непечатных знаков заданы с помощью чисел в шестнадцатеричной системе исчисления.

При использовании UTF-8 для передачи данных в формате ASCII используются 7 первых битов. Последний ( восьмой ) служит для вывода « мусора » ( некорректно раскодированных данных ). Что при использовании кодировки для латинских символов существенно уменьшает объем текстовых данных.

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

Как установить кодировку в HTML и PHP

Utf 8 для чего нужен. kak ustanovit kodirovku 271129. Utf 8 для чего нужен фото. Utf 8 для чего нужен-kak ustanovit kodirovku 271129. картинка Utf 8 для чего нужен. картинка kak ustanovit kodirovku 271129

Глобальные настройки кодировки

Описанные выше методы могут использоваться для отдельных веб-страниц или небольших сайтов. Но что делать, если вы имеете дело с ресурсом, состоящим из нескольких сотен страниц и десятка разделов? Давайте разберемся, как установить кодировку utf 8 для всего сайта.

Utf 8 для чего нужен. adddefaultcharset utf 8 271140. Utf 8 для чего нужен фото. Utf 8 для чего нужен-adddefaultcharset utf 8 271140. картинка Utf 8 для чего нужен. картинка adddefaultcharset utf 8 271140

Как и в предыдущем примере, в нем нужно заменить значение AddDefaultCharset на нужное. В нашем случае это utf-8 :

Utf 8 для чего нужен. zamenit znachenie adddefa 271140. Utf 8 для чего нужен фото. Utf 8 для чего нужен-zamenit znachenie adddefa 271140. картинка Utf 8 для чего нужен. картинка zamenit znachenie adddefa 271140

Изменение кодировки базы данных

Здесь нужно поменять значение нескольких полей на utf-8 :

И затем добавить строку skip-character-set-client-handshake :

Utf 8 для чего нужен. skip character set client 271143. Utf 8 для чего нужен фото. Utf 8 для чего нужен-skip character set client 271143. картинка Utf 8 для чего нужен. картинка skip character set client 271143

Сначала узнаем, какие кодировки установлены по умолчанию в нашей базе данных. Для этого вводим запрос SQL :

Вот какой ответ мы должны получить:

Utf 8 для чего нужен. otvet mi dolzhni poluchit 271144. Utf 8 для чего нужен фото. Utf 8 для чего нужен-otvet mi dolzhni poluchit 271144. картинка Utf 8 для чего нужен. картинка otvet mi dolzhni poluchit 271144

Если какие-либо значения нас не удовлетворяют, то нужно их изменить. Воспользуемся для этого запросом к ядру сервера СУБД:

Источник

Русские Блоги

Почему кодировка utf8 так распространена и каковы ее преимущества?

Зачем вам нужен набор символов

Какие наборы символов

Самым ранним набором символов является кодировка ANSI (американский стандартный код для обмена информацией). Американцы кодируют все строчные буквы, заглавные буквы, пробелы и символы от 33 до 127,0-32 Для специальных целей такой низкий 7-битный байт может представлять эти символы, которые могут отлично отображать английский язык.

Utf 8 для чего нужен. 194ae55b5c814fa06ff7670c8790ed28. Utf 8 для чего нужен фото. Utf 8 для чего нужен-194ae55b5c814fa06ff7670c8790ed28. картинка Utf 8 для чего нужен. картинка 194ae55b5c814fa06ff7670c8790ed28

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

Utf 8 для чего нужен. 291b9ff903cd0e6d74eed2f28b12cd7c. Utf 8 для чего нужен фото. Utf 8 для чего нужен-291b9ff903cd0e6d74eed2f28b12cd7c. картинка Utf 8 для чего нужен. картинка 291b9ff903cd0e6d74eed2f28b12cd7c

GB2312、GBK、GB18030

Но когда дело дошло до Китая, китайцы увидели достаточно шаров. В Великом Китае около 80 000 человек. Эти 255 находятся далеко.

Таким образом, китайский народ самостоятельно исследовал и разработал и отменил странные символы после 127-го. Правило: значение символа меньше 127 совпадает с оригиналом, но когда два символа больше 127 объединены, это означает китайский символ. Первый байт (он назвал его старшим байтом) используется от 0xA1 до 0xF7, за которым следует Один байт (младший байт) имеет значение от 0xA1 до 0xFE, поэтому мы можем комбинировать более 7000 упрощенных китайских символов. В этих кодах мы также скомпилировали математические символы, латинские греческие буквы и японские псевдонимы. Даже исходные числа, знаки препинания и буквы в ASCII были перекодированы с помощью двухбайтовых кодов. Это то, что часто называют символом «полной ширины», а символы ниже 127 называются символами «полуширины».

Однако GB 2312 не может обрабатывать редкие символы, встречающиеся в именах древних китайцев и т. Д., Что привело к появлению китайского набора символов GBK и GB 18030.

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

Национальный стандарт GB18030-2000 «Кодировка китайских символов для обмена информациейНабор символов«Дополнение к базовому набору» является наиболее важным стандартом кодировки китайских символов после GB2312-1980 и GB13000-1993 в Китае.Компьютерная системаОдин из основных стандартов, которым необходимо следовать. Стандарт кодирования GB18030-2000Министерство информационной индустриииГосударственное бюро качества и технического надзораОн был выпущен совместно 17 марта 2000 года и будет официально введен в действие в качестве национального стандарта в январе 2001 года. GB18030-2005 «Информационные технологииКитайское кодированиехарактер«Коллекция» независимо разработана нашей страной, которая в основном состоит из китайских иероглифов и содержит различные символы китайского меньшинства (такие как тибетский,МонголияДай ЙиКорея、УйгурскийИ т.д.) Супер большое китайское кодированиехарактерколлекцияОбязательные стандартыВключая более 70000 китайских иероглифов.

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

UNICODE

В то время каждая страна придумала набор своих собственных стандартов кодирования, таких как Китай, в результате чего никто не знал кодирование друг друга, и никто не поддерживал кодирование других. В то время китайцы хотели отображать на компьютере китайские иероглифы, им нужно было установить «систему китайских иероглифов», которая специально использовалась для отображения и ввода китайских иероглифов. Если была установлена ​​неправильная система иероглифов, отображение могло быть грязным. Что мне делать? В этот момент один позвонил ISOМеждународная организация (Международная организация по стандартизации) решила заняться этим вопросом. Метод, который они использовали, очень прост: откажитесь от всех региональных схем кодирования и заново включите кодирование, которое включает в себя все культуры, все буквы и символы на земле! Они намереваются назвать его «Универсальный многооктетный набор кодированных символов», называемый UCS, обычно известный как « UNICODE”。

Когда UNICODE начал развиваться, емкость памяти компьютера значительно возросла, и пространство перестало быть проблемой. Таким образом, ISO прямо оговаривает, что для равномерного представления всех символов должны использоваться два байта, то есть 16 битов. Для этих символов «полуширины» в ascii пакет UNICODE сохраняет свою исходную кодировку без изменений, но его длина отличается от исходной 8 Бит расширяется до 16 бит, а символы других культур и языков перекодируются равномерно. Поскольку английскому символу «половинной ширины» нужно использовать только младшие 8 бит, верхние 8 бит всегда равны 0, поэтому это атмосферное решение будет тратить вдвое больше места при сохранении английского текста.

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

Обратите внимание, что здесь Юникод определяет только представление всех символов в 1-65536 и не рассматривает, как хранить и анализировать конкретный компьютер.

UTF-8、UTF-16

Так много стандартов UTF (UCS Transfer Format) для передачи появилось, как следует из названия,UTF88 бит за раз для передачи данных, и UTF16Это 16 битов за раз, но для надежности передачи от UNICODE к UTF нет прямого соответствия, но некоторые алгоритмы и правила должны быть преобразованы.

UTF-16 означает «китайский»

UTF-32

Почему UTF-8 обычно используется, каковы преимущества?

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

Что касается вопроса, что Блокнот не может сохранить «Unicom» в одиночку (воспроизведенный)

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

Эта проблема вызвана конфликтом между кодировкой GB2312 и UTF8. Правило преобразования из UNICODE в UTF8 вводится из Интернета:

1110xxxx 10xxxxxx 10xxxxxx

Например, кодировкой Unicode китайского символа является 6C49. 6C49 находится между 0800-FFFF, поэтому используется 3-байтовый шаблон: 1110xxxx 10xxxxxx 10xxxxxx. Запись 6C49 в двоичную форму: 0110 1100 0100 1001, битовый поток делится на 0110 110001 001001 в соответствии с методом сегментации трехбайтового шаблона, и, в свою очередь, заменяя x в шаблоне, мы получаем: 1110-0110 10-110001 10-001001, то есть E6 B1 89, это его кодировка UTF8.

Когда вы создаете новый текстовый файл, кодировкой по умолчанию для Блокнота является ANSI. Если вы вводите китайские символы в кодировке ANSI, это фактически метод кодирования серии GB. Под этой кодировкой внутренний код «Unicom»:

Вопрос о заголовке файла спецификации

При использовании программного обеспечения, такого как Блокнот, который поставляется вместе с WINDOWS, при сохранении файла в кодировке UTF-8 в начале файла вставляются три невидимых символа (0xEF 0xBB 0xBF или BOM). Это строка скрытых символов, используемая для того, чтобы редакторы, такие как Блокнот, могли распознать, кодируется ли этот файл в UTF-8. Это может избежать этой проблемы. Для общих файлов это не вызовет никаких проблем.

Определите, какой текст UTF используется

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

EF BB BF UTF-8
FE FF UTF-16/UCS-2, little endian
FF FE UTF-16/UCS-2, big endian
FF FE 00 00 UTF-32/UCS-4, little endian.
00 00 FE FF UTF-32/UCS-4, big-endian.

Источник

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

Utf 8 для чего нужен. f8ojbrekuhscl9trjum rmga9we. Utf 8 для чего нужен фото. Utf 8 для чего нужен-f8ojbrekuhscl9trjum rmga9we. картинка Utf 8 для чего нужен. картинка f8ojbrekuhscl9trjum rmga9we

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

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

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

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

На заре своего развития интернет был исключительно англоязычным. Его авторам и пользователям не нужно было заботиться о символах других языков, и все нужды полностью покрывала кодировка American Standard Code for Information Interchange (ASCII).

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

то с помощью ASCII он преобразует её во фразу «Hello world».

Один байт (восемь бит) был достаточно велик, чтобы вместить в себя любую англоязычную букву, как и управляющие символы, часть из которых использовалась телепринтерами, так что в те годы они были полезны (сегодня уже не особо). К управляющим символам относился, например 7 (0111 в двоичном представлении), который заставлял компьютер издавать сигнал; 8 (1000 в двоичном представлении) — выводил последний напечатанный символ; или 12 (1100 в двоичном представлении) — стирал весь написанный на видеотерминале текст.

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

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

Utf 8 для чего нужен. image loader. Utf 8 для чего нужен фото. Utf 8 для чего нужен-image loader. картинка Utf 8 для чего нужен. картинка image loader

Проблемы с ASCII

Позиции со 128 по 255 были пустыми. Общественность задумалась, чем их заполнить. Но у всех были разные идеи. Американский национальный институт стандартов (American National Standards Institute, ANSI) формулирует стандарты для разных отраслей. Там утвердили позиции ASCII с 0 по 127. Их никто не оспаривал. Проблема была с остальными позициями.

Вот чем были заполнены позиции 128-255 в первых компьютерах IBM:

Utf 8 для чего нужен. image loader. Utf 8 для чего нужен фото. Utf 8 для чего нужен-image loader. картинка Utf 8 для чего нужен. картинка image loader

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

Все эти различные концовки назвали кодовыми страницами.

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

Здесь собрана коллекция из более чем 465 разных кодовых страниц! Существовали разные страницы даже в рамках какого-то одного языка, например, для греческого и китайского. Как можно было стандартизировать этот бардак? Или хотя бы заставить его работать между разными языками? Или между разными кодовыми страницами для одного языка? В языках, отличающихся от английского? У китайцев больше 100 000 иероглифов. ASCII даже не может всех их вместить, даже если бы решили отдать все пустые позиции под китайские символы.

Эта проблема даже получила название Mojibake (бнопня, кракозябры). Так говорят про искажённый текст, который получается при использовании некорректной кодировки. В переводе с японского mojibake означает «преобразование символов».

Utf 8 для чего нужен. image loader. Utf 8 для чего нужен фото. Utf 8 для чего нужен-image loader. картинка Utf 8 для чего нужен. картинка image loader

Пример бнопни (кракозябров).

Безумие какое-то.

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

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

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

Так появился Unicode

Unicode расшифровывают как Universal Coded Character Set (UCS), и у него есть официальное обозначение ISO/IEC 10646. Но обычно все используют название Unicode.

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

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

Префикс U+ говорит о том, что это стандарт Unicode, а число — это результат преобразования двоичных чисел. Стандарт использует шестнадцатеричную нотацию, которая является упрощённым представлением двоичных чисел. Здесь вы можете ввести в поле что угодно и посмотреть, как это будет преобразовано в Unicode. А здесь можно полюбоваться на все 143 859 кодовых пунктов.

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

Осталось добавить последний ингредиент.

Unicode Transform Protocol (UTF)

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

Но если у нас есть три разные кодировки, то как узнать, какая из них применяется в конкретном файле? Для этого используют маркер последовательности байтов (Byte Order Mark, BOM), который ещё называют сигнатурой кодировки (Encoding Signature). BOM — это двухбайтный маркер в начале файл, который говорит о том, какая именно кодировка тут применена.

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

Utf 8 для чего нужен. image loader. Utf 8 для чего нужен фото. Utf 8 для чего нужен-image loader. картинка Utf 8 для чего нужен. картинка image loader

Этот график построен в 2012-м, UTF-8 становилась доминирующей кодировкой. И всё ещё ею является.

Utf 8 для чего нужен. image loader. Utf 8 для чего нужен фото. Utf 8 для чего нужен-image loader. картинка Utf 8 для чего нужен. картинка image loader

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

UTF-8 кодирует с помощью одного байта каждый кодовый пункт Unicode с 0 по 127 (как в ASCII). То есть если вы писали программу с использованием ASCII, а ваши пользователи применяют UTF-8, они не заметят ничего необычного. Всё будет работать как задумано. Обратите внимание, как это важно. Нам нужно было сохранить обратную совместимость с ASCII в ходе массового внедрения UTF-8. И эта кодировка ничего не ломает.

Как следует из названия, кодовый пункт состоит из 8 битов (один байт). В Unicode есть символы, которые занимают несколько байтов (вплоть до 6). Это называют переменной длиной. В разных языках удельное количество байтов разное. В английском — 1, европейские языки (с латинским алфавитом), иврит и арабский представлены с помощью двух байтов на кодовый пункт. Для китайского, японского, корейского и других азиатских языков используют по три байта.

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

И теперь мы, как по волшебству, пришли к соглашению, как закодировать шумерскую клинопись (Хабр её не отображает), а также значки emoji!

Подытожив сказанное: сначала читаем BOM, чтобы определить версию кодировки, затем преобразуем файл в кодовые пункты Unicode, а потом выводим на экран символы из набора Unicode.

Напоследок про UTF

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

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

Это всё?

Unicode ещё не завершён. Как и в случае с любым стандартом, мы что-то добавляем, убираем, предлагаем новое. Никакие спецификации нельзя назвать «завершёнными». Обычно в год бывает 1-2 релиза, найти их описание можно здесь.

Если вы дочитали до конца, то вы молодцы. Предлагаю сделать домашнюю работу. Посмотрите, как могут ломаться сайты при использовании неправильной кодировки. Я воспользовался этим расширением для Google Chrome, поменял кодировку и попытался открывать разные страницы. Информация была совершенно нечитаемой. Попробуйте сами, как выглядит бнопня. Это поможет понять, насколько важна кодировка.

Utf 8 для чего нужен. image loader. Utf 8 для чего нужен фото. Utf 8 для чего нужен-image loader. картинка Utf 8 для чего нужен. картинка image loader

Заключение

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

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

Источник

Как придумали кодировку UTF-8: выдержки из переписки создателей

Utf 8 для чего нужен. image loader. Utf 8 для чего нужен фото. Utf 8 для чего нужен-image loader. картинка Utf 8 для чего нужен. картинка image loader

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

На самом деле изобретение этой кодировки не может быть настолько банальным хотя бы потому, что к ее созданию приложил руку Кен Томпсон — легендарная личность. Он работал вместе с Деннисом Ритчи, был одним из создателей UNIX, внес вклад в разработку C (изобрел его предшественника — B), а позднее, во время работы в Google, принял участие в создании языка Go.

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

Действующие лица:

ken (at) entrisphere.com — Кен Томпсон

Utf 8 для чего нужен. ybzia6rnyunokcq3unygeqdw5qs. Utf 8 для чего нужен фото. Utf 8 для чего нужен-ybzia6rnyunokcq3unygeqdw5qs. картинка Utf 8 для чего нужен. картинка ybzia6rnyunokcq3unygeqdw5qs
Кен Томпсон (слева) с Деннисом Ритчи

«Rob ‘Commander’ Pike» — Роберт Пайк, канадский программист, работавший над UTF-8 вместе c Кеном Томпсоном

Utf 8 для чего нужен. image loader. Utf 8 для чего нужен фото. Utf 8 для чего нужен-image loader. картинка Utf 8 для чего нужен. картинка image loader

mkuhn (at) acm.org — Маркус Кун, немецкий ученый в области информатики

Utf 8 для чего нужен. image loader. Utf 8 для чего нужен фото. Utf 8 для чего нужен-image loader. картинка Utf 8 для чего нужен. картинка image loader

henry (at) spsystems.net — Генри Сперсер, автор одной из реализаций RegExp

Utf 8 для чего нужен. image loader. Utf 8 для чего нужен фото. Utf 8 для чего нужен-image loader. картинка Utf 8 для чего нужен. картинка image loader

Russ Cox — Русс Кокс, сотрудник Bell Labs, работавший над системой Plan 9

Utf 8 для чего нужен. image loader. Utf 8 для чего нужен фото. Utf 8 для чего нужен-image loader. картинка Utf 8 для чего нужен. картинка image loader

Greger Leijonhufvud — Один из сотрудников X/Open

Utf 8 для чего нужен. image loader. Utf 8 для чего нужен фото. Utf 8 для чего нужен-image loader. картинка Utf 8 для чего нужен. картинка image loader

Plan 9 — Операционная система, в которой впервые была использована кодировка UTF-8 для обеспечения ее мультиязычности.

Utf 8 для чего нужен. image loader. Utf 8 для чего нужен фото. Utf 8 для чего нужен-image loader. картинка Utf 8 для чего нужен. картинка image loader

UTF-8 — Кодировка символов Юникода

Utf 8 для чего нужен. image loader. Utf 8 для чего нужен фото. Utf 8 для чего нужен-image loader. картинка Utf 8 для чего нужен. картинка image loader

Переписка 2003 года

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

Глядя на разговоры о происхождении UTF-8, я вижу, как постоянно повторяют одну и ту же историю.

Произошло это таким образом. Мы пользовались оригинальным UTF из стандарта ISO 10646 для поддержки 16-битных символов в Plan 9, который ненавидели, и уже были готовы к выпуску Plan 9, когда однажды поздно вечером мне позвонили одни парни, кажется они были из IBM. Я припоминаю, что встречался с ними на заседании комитета X/Open в Остине. Они хотели, чтобы мы с Кеном посмотрели их проект FSS/UTF.

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

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

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

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

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

Мне кажется, что это происходило в среду вечером. Мы пообещали, что запустим систему к понедельнику, когда у них, как мне кажется, намечалось какое-то важное совещание. В тот же вечер Кен написал код кодировщика/раскодировщика, а я начал разбираться с С и с графическими библиотеками. На следующий день код был готов, и мы начали конвертировать текстовые файлы системы. К пятнице Plan 9 уже запускался и работал на так называемом UTF-8.

А в дальнейшем история была немного переписана.

Почему мы просто не воспользовались их FSS/UTF?

Насколько я помню, в том первом телефонном звонке я напел им Дезидерату своих требований для кодировки, и в FSS/UTF не было как минимум одного — возможности синхронизировать поток байтов взятых из середины потока, используя для синхронизации как можно меньше символов (см выше, про определение границ символов. прим. пер).

Имеется в виду крылатая фраза, берущая начало из альбома Леса Крейна 1971 года, чье название и заглавная композиция: «Desiderata» взяты из одноименной поэмы, что переводится с латыни, как: «Желаемое». То есть, «напел им Дезидерату» следует понимать как «высказал пожелания». (прим пер.)

Поскольку нигде решения не было, мы были вольны делать это как хотели.
Я думаю, что «историю придумали IBM, а реализовали в Plan 9» берет свое начало в документации по RFC 2279. Мы были так счастливы, когда UTF-8 прижился, что никому не рассказали эту историю.

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

Итак, вся слава достается парням из X/Open и IBM за то, что они сделали это возможным и продвинули кодировку, но разработал ее Кен, и я ему помогал в этом, что бы там ни говорилось в книгах по истории.

Я попросил Расса Кокса покопаться в архивах. Прикладываю его сообщение. Я думаю, вы согласитесь, что это подтверждает историю, которую я отправил раньше. Письмо, которое мы выслали в X/Open (думаю, что Кен редактировал и рассылал этот документ) включает новый «desideratum номер 6» про обнаружение границ символов.

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

Нашлось несколько писем из ваших ящиков, которые выдал грепинг по строке utf.

В /usr/ken/utf/xutf я нашел копию того, что, по видимому, является исходником того не самосинхронизирующегося способа кодирования.со схемой UTF-8, добавленной в конце письма (начинается со слов «Мы определяем 7 типов byte »).

Приведенная ниже версия письма, датированная 2 сентября 23:44:10, является первой. После нескольких правок, утром 8 сентября, получилась вторая версия. Логи почтового сервера показывают, как отправляется вторая версия письма и, через некоторое время, возвращается к Кену:

Файлы из почтового архива

Далее файл с перепиской из дапма почтового сервера, который Расс Кокс приаттачил к своему, в ответ на просьбу Роберта покопаться в истории. Это «первая версия». (прим пер.)

Вот наше предложение по модификации FSS-UTF. Речь идет о том же, о чем и в предыдущем. Приношу свои извинения автору.

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

File System Safe Universal Character Set Transformation Format (FSS-UTF)

В связи с утверждением ISO/IEC 10646 (Unicode) в качестве международного стандарта и ожиданием широкого распространения этого Универсального Набора Кодированных символов (UCS), для операционных систем, исторически основанных на формате ASCII, необходимо разработать способы представления и обработки большого количества символов, которые можно закодировать с помощью нового стандарта. У UCS есть несколько проблем, которые нужно решить в исторически сложившихся операционных системах и среде для программирования на языке C.

(Далее в тексте несколько раз упоминаются «historical operating systems». Видимо в контексте «исторически работающие с кодировкой ASCII». Я или опускал этот эпитет, или заменял его на «существующие» и т.п. прим. пер)

Самой серьезной проблемой является схема кодирования, используемая в UCS. А именно объединение стандарта UCS с существующими языками программирования, операционными системами и утилитами. Проблемы в языках программирования и операционных системах решаются в разных отраслях, тем не менее мы все еще сталкиваемся с обработкой UCS операционными системами и утилитами.

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

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

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

Цель/Задача

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

Критерии для формата преобразования

Ниже приведены рекомендации, которые должны соблюдаться, при определении формата преобразования UCS:

Предписания FSS-UTF

Предлагаемый формат преобразования UCS кодирует значения UCS в диапазоне [0,0x7fffffff] с использованием нескольких байт на один символ и длиной 1, 2, 3, 4, 5, и 6 байт. Во всех случаях кодирования более чем одним байтом начальный байт определяет количество используемых байтов, при этом в каждом байте устанавливается старший бит. Каждый байт, который не начинается с 10XXXXXX, является началом последовательности символов UCS.

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

Значение символа UCD в многобайтовой кодировке — это конкатенация v-битов. Если возможно несколько способов кодирования, например UCS 0, то допустимым считается самый короткий.

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

Вторая версия письма, с правками

Далее прикладывается копия письма, которая выше описывается как: «После нескольких правок, утром 8 сентября, получилась вторая версия». Повторяющаяся часть скрыта под спойлером. (прим.пер.)

Наконец-то я получил свою копию.

File System Safe Universal Character Set Transformation Format (FSS-UTF)

В связи с утверждением ISO/IEC 10646 (Unicode) в качестве международного стандарта и ожиданием широкого распространения этого Универсального Набора Кодированных символов (UCS), для операционных систем, исторически основанных на формате ASCII, необходимо разработать способы представления и обработки большого количества символов, которые можно закодировать с помощью нового стандарта. У UCS есть несколько проблем, которые нужно решить в исторически сложившихся операционных системах и среде для программирования на языке C.

Самой серьезной проблемой является схема кодирования, используемая в UCS. А именно объединение стандарта UCS с существующими языками программирования, операционными системами и утилитами. Проблемы в языках программирования и операционных системах решаются в разных отраслях, тем не менее мы все еще сталкиваемся с обработкой UCS операционными системами и утилитами.

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

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

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

Цель/Задача

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

Критерии для формата преобразования

Ниже приведены рекомендации, которые должны соблюдаться, при определении формата преобразования UCS:

Предписания FSS-UTF

Предлагаемый формат преобразования UCS кодирует значения UCS в диапазоне [0,0x7fffffff] с использованием нескольких байт на один символ и длиной 1, 2, 3, 4, 5, и 6 байт. Во всех случаях кодирования более чем одним байтом начальный байт определяет количество используемых байтов, при этом в каждом байте устанавливается старший бит. Каждый байт, который не начинается с 10XXXXXX, является началом последовательности символов UCS.

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

Значение символа UCD в многобайтовой кодировке — это конкатенация v-битов. Если возможно несколько способов кодирования, например UCS 0, то допустимым считается самый короткий.

Мы определяем 7 байтовых типов:

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

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

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

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

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *