Кодирование текстовой информации — что это, определение и ответ

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

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

Кодирование – это процесс представления информации в виде последовательности условных обозначений.

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

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

Данная последовательность представляется в виде кодовой таблицы, в которой номера строки и столбца определяют код слова.

Кодировка ASCII

Повсеместное распространение компьютеров и средств обмена текстовой информацией потребовало разработки единого стандарта кодирования для передачи и хранения информации. Такой стандарт разработали в США в 1963 году.

Таблицу из 27 = 128 символов назвали ASCII – Американский стандарт кодов для обмена информацией.

Кодировка ASCII

При развертывании в двоичную форму коды представляют собой семиразрядные целые двоичные числа в диапазоне от 000 00002 = 0016 = 0 до 111 11112 = 7F16 = 127.

По таблице вы могли заметить, что первые 32 символа обозначают некоторые действия при вводе текста. Этот набор от 00 до 1F называется управляющими символами и не отражаются какими-либо знаками на экране монитора или при печати. Следующие символы, начиная с 2016 имеют графическое отображение.

Пример.

Код 0816 = BS. Происходит стирание предыдущего символа.

Код 4216 = «В». На экране появляется символ «В».

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

Кодовые страницы (расширение кода ASCII)

Кодовые страницы – это расширение кода ASCII.

Восьмиразрядная двоичная кодировка позволяет кодировать алфавит из 28 = 256 символов. Таким образом, к первой половине ASCII, присоединяется вторая половина, на которой размещаются нелатинские алфавиты, символы псевдографики и некоторые другие знаки. Эта часть таблицы кодировки называется кодовой страницей (CP – code page).

Кодовая страница СР1251

СР1251 – кодировка, являющаяся стандартной 8-битной кодировкой для всех русских версий Microsoft Windows.

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

Кодовая страница CP1251 в операционной системе Windows

Кодовая страница KOI8

KOI8 – кодовая страница, разработанная для кодирования букв кириллических алфавитов.

Разработчики КОI8 поместили символы русского алфавита в таблице таким образом, что позиции кириллических символов соответствуют их фонетическим аналогам в английском алфавите в базовой таблице. Это означает, что если в тексте, написанном в КОИ-8, убирать восьмой бит каждого символа (отнять 128), то получается читабельный текст, хотя он и написан латинскими символами.

Пример.

Слова «Русский Текст» превратились бы в «rUSSKIJ tEKST».

Но из-за такого решения символы кириллицы оказались расположены не в алфавитном порядке.

Существует несколько вариантов кодировки КОI8 для различных кириллических алфавитов. Русский алфавит описывается в кодировке KOI8-R, украинский –– в KOI8-U.

Кодовая страница KOI8

Кодировка Unicode

Еще один стандарт символьной кодировки, где присутствует русский алфавит, – это

Unicode, разработанный в 1991 году и позволяющий закодировать 216 = 65 536 символов.

Диапазон кодов символов в шестнадцатеричной форме: от 0000 до FFFF, а каждому символу в такой кодировке отводится 2 байта памяти.

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

Итог

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

UTF-8 vs UTF-16. Несколько советов программистам / Хабр

Введение

С появлением первых устройств цифровой передачи информации и электронно-вычислительных машин возникла задача кодирования текстовых символов с помощью последовательностей единиц и нулей. Минимальная единица представления информации – байт. Исходя их этого в 1963 году в США разработана, стандартизована, а впоследствии расширена кодовая таблица ASCII (American standard code for information interchange), использовавшая 8 битную кодировку. В первую очередь с помощью этой таблицы предполагалось кодирование цифр и букв английского языка. Первые 128 символов таблицы представлены на рис.1:

Рис.1. Первые 128 символов таблицы ASCII.

Номер ячейки в таблице (рис.1) является кодом символа. В качестве примера рассмотрим кодирование слова Hello. Номера ячеек таблицы ASCII, в которых размещены буквы: 72 (H), 101 (e), 108 (l), 111 (o). Код слова в бинарном представлении выглядит следующим образом:

00010010 (H) 10100110 (e) 00110110 (l) 00110110 (l) 11110110 (o) (старший бит справа).

Выделенные подчеркиванием и жирным коды в двоичном представлении соответствуют номерам ячеек в таблице (рис.1). Алгоритм формирования кода следующий:

1. Выделены жирным – биты управления кодированием (префикс). 010 – кодируется заглавная буква алфавита, 011 – строчная.

2. Выделены подчеркиванием – порядковые номера букв в английском алфавите.

Таким образом, с помощью первых 128 ячеек таблицы ASCII могли быть закодированы основные символы, цифры и буквы английского языка. Остальные 128 ячеек (8 битная кодировка позволяет закодировать 256 символов) могли использоваться для кодирования других языков. Однако, учитывая разнообразие символов и языков, 8 бит недостаточно.

Стандарт Юникод

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

Стандарт Юникод предоставляет пользователям таблицу Юникод и способы кодирования символов.

Символы таблицы Юникод являются элементами «универсального набора символов» UCS (Universal Coded Character Set), определенного международным стандартом ISO/IEC 10646. Таблица Юникод каждому символу UCS сопоставляет кодовую точку, которая является номером ячейки таблицы, содержащей символ.

Способы кодирования символов таблицы Юникод, т.е. преобразования номеров ячеек таблицы Юникод в бинарные коды, составляют кодовое пространство, состоящее из трех кодов семейства UTF (Unicode Transformation Format): UTF-8, UTF-16 и UTF-32

UTF-8 – стандарт кодирования, преобразующий номера ячеек таблицы Юникод в бинарные коды с использованием переменного количества бит: 8, 16, 24 или 32.

UTF-16 – стандарт кодирования, преобразующий номера ячеек таблицы Юникод в бинарные коды с использованием переменного количества бит:16 или 32.

Коды UTF-8 и UTF-16 используют разные алгоритмы кодирования набора символов UCS.

Стандарт кодирования UTF-8

Стандарт закреплен в RFC (Request For Comments) 3629. Алгоритм кодирования согласно RFC:

0xxxxxxx

110xxxxx 10xxxxxx

1110xxxx 10xxxxxx 10xxxxxx

11110xx 10xxxxxx 10xxxxxx 10xxxxxx

Старший бит слева. Началом кода является управляющий символ (выделен жирным):

0 – используется 8-битная кодировка,

110 – используется 16-битная кодировка,

1110 – используется 24-битная кодировка,

11110 – используется 32 битная кодировка.

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

Первые 128 ячеек таблицы Юникод повторяют таблицу ASCII. Для кодирования заглавных и строчных букв русского алфавита используются ячейки с номерами 1040-1103.

Рассмотрим пример кодирования фразы «Папа Hello».

Код в бинарном виде (старший бит справа):

00001011 11111001 (П) 00001011 00001101 (а) 00001011 11111101 (п) 00001011 00001101 (а) 00000100 (пробел) 00010010 (H) 10100110 (e) 00110110 (l) 00110110 (l) 11110110 (o).

Букве П русского алфавита согласно таблицы Юникод соответствует номер 1055, в бинарном представлении 10000011111 – 11 бит. Соответственно данный символ может быть закодирован двумя байтами с использованием префикса 110 – для первого байта и 10 – для второго байта. Английские буквы слова Hello кодируются 1 байтом, а коды совпадают с кодами в таблице ASCII.

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

Стандарт кодирования UTF-16

В феврале 2000 года опубликован документ RFC 2781, в котором закреплен стандарт UTF-16, позволяющий кодировать символы таблицы Юникод с помощью 16 или 32 битных значений. Символы с номерами 0-55295 и 57344-65535 кодируются с помощью 16 бит без изменений (без использования префиксов), а остальные символы, номера которых в двоичном представлении формируются количеством бит больше 16, кодируются 32 битами с использованием специального алгоритма. Рассмотрим пример кодирования фразы «Папа Hello».

Код в бинарном виде (старший бит справа):

11111000 00100000 (П) 00001100 001000000 (а) 11111100 00100000 (п) 00001100 001000000 (а) 00000100 00000000 (пробел) 00010010 00000000 (H) 10100110 00000000 (e) 00110110 00000000 (l) 00110110 00000000 (l) 111110110 00000000 (o).

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

Рассмотрим подробнее алгоритм кодирования символов, номера которых превышают значение 65535. Для примера в качестве символа используем букву древнетюркского алфавита, представленную на рис.2:

Рис.2. Буква древнетюркского алфавита.

Номер предложенного символа в таблице Юникод – 68620 (0х10COC).

Алгоритм преобразования номера символа в код UTF-16 состоит из нескольких шагов:

  1. Из значения номера символа вычесть число 0х10000. Данная операция позволяет привести размерность бинарного представления номера символа к 20 битам. Для предложенного символа получим: 0х10COC – 0x10000 = 0xC0C.

  2. Для полученного значения выделить старшие 10 бит и младшие 10 бит. В примере число 0хС0С в бинарном виде представляется, как 00000000110000001100, где жирным выделены 10 старших бит, а подчеркиванием – 10 младших.

  3. К шестнадцатеричному значению 0xD800 (11011000 00000000) прибавить значение 0х03 (00000000 00000011), сформированное 10 старшими битами, полученными на предыдущем шаге. 0xD800 + 0х03 =  0хD803 (11011000 00000011) – 16 старших бит кодового слова UTF-16.

  4. К шестнадцатеричному значению 0xDC00 (11011000 00000000) прибавить значение 0х0C (00000000 00001100), сформированное 10 младшими битами, полученными на шаге №2. 0xDС00 + 0х0С =  DС0С (11011100 00001100) – 16 младших бит кодового слова UTF-16.

  5. Кодовое слово UTF-16, соответствующее символу в примере, формируется из бит, полученных на шагах 3 и 4: 0хD803DC0C (11011000 00000011 11011100 00001100).

Сравнение стандартов UTF-8 и UTF-16 с точки зрения объема машинной памяти, используемой кодом для представления символов

Результаты сравнения стандартов представлены в таблице 1.

Таблица 1. Результаты сравнения стандартов.

Диапазон   номеров 

0-127

128 — 2047

2048-32767

32768-65535

65535-

1048575

1048575-…

UTF-8

8

16

24

32

32

_

UTF-16

16

16

16

16

32

32

В ячейках таблицы 1 содержится количество бит, требуемое для кодирования одного символа из таблицы Юникод. Видно, что для диапазонов номеров ячеек 128-2047, 65535-1048575 стандарты UTF-8 и UTF-16 используют одинаковое количество бит. Для диапазона 0-127 выгодно использование стандарта UTF-8, например, в случае, если программисту поручили реализовать кодер букв английского алфавита. Для диапазонов 2048-32767 и 32768-65535 выгодно использование стандарта UTF-16, например, в случае, если программисту поручили реализовать кодер иероглифов Бопомофо (занимают в таблице Юникод диапазон ячеек 12549-12589). Кодирование символов таблицы Юникод, расположенных в ячейках, номера которых начинаются от 1048575 возможно только с использованием кодировки UTF-16. 

В предыдущих главах приведены примеры кодирования фразы «Папа Hello» стандартами UTF-8 и UTF-16. Кодировкой UTF-8 используются 14 байт, кодировкой UTF-16 20 байт, что связано с избыточностью кодирования англоязычных символов во втором случае из-за использования дополнительного байта 0х00. Можно сделать вывод, что для кодирования текста содержащего набор букв русского и английского алфавитов, предпочтительно использование кодировки UTF-8.

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

Несколько советов программистам

Допустим, программист решил реализовать текстовый редактор, поддерживающий алфавит языка Бопомофо. Символы данного языка располагаются в таблице Юникод в диапазоне 12549-12589 и, следовательно, программисту необходимо выбрать стандарт UTF-16 для кодирования. Предположим, что для ввода символов решено использовать программную клавиатуру, состоящую из кнопок, каждая из которых соответствует букве алфавита языка. Кнопки – объекты класса button. Нажатие пользователем на какую-либо из кнопок порождает событие, в результате которого приложению становится известен номер ячейки таблицы Юникод. Программисту рекомендуется:

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

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

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

Отметим проблему кодирования составных символов, которая является важным техническим аспектом. Например, символ ü может быть интерпретирован, как самостоятельный символ, которому соответствует номер ячейки 252 или может быть скомпонован из двух символов: u, которому соответствует номер ячейки 117 и символа ¨, которому соответствует номер ячейки 776. Программист должен строго придерживаться одного из вариантов представления таких символов иначе побайтовое сравнение строк будет невозможно. Рекомендуется использование второго варианта, который может облегчить поиск составных символов в тексте. Например, если пользователь осуществляет поиск символа u, то ему может быть выведен в качестве результата, как составной символ ü, так и самостоятельный u.

кодирование

символов в NLP: роль ASCII и Unicode | by Javi Sánchez

Пристальный взгляд на технические аспекты и практические приложения

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

Фото Giammarco на Unsplash

Но прежде всего представим несколько важных концепций.

Кодировка символов — это система представления символов в виде числовых значений, известных как кодовые точки. Эти кодовые точки позволяют компьютерам хранить и обрабатывать текст, который затем можно отображать или использовать другими способами. В этой статье мы объясним системы кодирования символов ASCII и Unicode и обсудим их полезность в области обработки естественного языка (NLP).

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

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

Систему отображения, используемую в ASCII, можно найти в этой таблице:

Таблица ASCII, ссылка

Как видим, из 128 кодовых точек только 94 являются печатными.

Например, используя шестнадцатеричный столбец этой таблицы, мы можем закодировать строку «Язык» как «4C 61 6E 67 75 61 67 65».

Ограничения ASCII

Основным ограничением кода ASCII, как мы уже говорили ранее, является то, что он имеет только 94 печатных символа. К ним относятся прописные и строчные английские буквы (52 символа), цифры (10 символов), а также знаки препинания и символы (32 символа). Таким образом, ASCII не подходит для любого языка, который использует больше, чем базовый латинский алфавит. В других языках (китайском, русском, норвежском) или даже в таких языках, как французский и испанский, например, есть разные символы, которые не могут быть отображены с помощью этой системы кодирования символов. Кроме того, существуют специальные символы, такие как смайлики или символы валюты, которые также не включены в ASCII, что ограничивает его возможности. По этим причинам потребовалась новая система кодирования символов, чтобы сделать ее более расширяемой и принять во внимание все эти символы и символы, которые были забыты в коде ASCII. Именно здесь возникает стандарт Unicode.

Unicode — это стандарт кодирования символов, разработанный в конце 1980-х — начале 1990-х годов для расширения возможностей ASCII и других существующих стандартов. Одним из основных мотивов его разработки была потребность в стандарте односимвольной кодировки, который можно было бы использовать для представления текста на любом языке. Для решения этой проблемы был сформирован консорциум Unicode, чтобы создать единый универсальный стандарт кодирования символов, который мог бы представлять все языки мира. Unicode использует 16-битную схему кодирования, которая позволяет представлять более 65 000 различных символов. Это значительно больше, чем 128 символов, которые можно представить с помощью ASCII. С тех пор он стал доминирующим стандартом кодирования символов для WWW и широко поддерживается современными вычислительными системами и программным обеспечением. Он может кодировать и отображать текст на самых разных языках, включая те, в которых используются сценарии, отличные от латинского алфавита (например, китайский, японский, арабский), а также специальные символы, такие как смайлики и символы валюты.

Дополнительную информацию можно найти на их веб-сайте.

Дом

Изменить описание

home.unicode.org

Как это работает?

Unicode определяет кодовое пространство, набор числовых значений в диапазоне от 0 до 10FFFF (в шестнадцатеричном формате), называемых кодовыми точками и обозначаемых буквой U в начале, поэтому он находится в диапазоне от U+0000 до U+10FFFF. Мы будем использовать букву U, за которой следует кодовое значение символа в шестнадцатеричном формате, и использовать его для цифр (при необходимости с ведущими нулями, например, U+00F7). Кодовое пространство Unicode разделено на семнадцать плоскостей, пронумерованных от 0 до 16. Каждая плоскость состоит из 65 536 (2¹⁶) последовательных кодовых точек. Уровень 0, известный как базовый многоязычный уровень (BMP), содержит наиболее часто используемые символы. Остальные плоскости (от 1 до 16) называются дополнительными плоскостями. Внутри каждой плоскости символы размещаются в именованных блоках связанных символов. Блок Unicode — это один из нескольких смежных диапазонов числовых кодов символов. Они используются для организации огромного количества символов стандарта Unicode. Каждый блок обычно, но не всегда, предназначен для предоставления глифов, используемых одним или несколькими конкретными языками или в некоторой общей области приложения.

Отображение и кодировки

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

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

В этом разделе мы увидим, как использовать Unicode в задачах НЛП и чем он полезен. Мы будем использовать код Tensorflow, чтобы сделать эти примеры более наглядными.

Модели НЛП часто обрабатывают разные языки с разными наборами символов. Наиболее репрезентативной задачей может быть нейронный машинный перевод (NMT), когда модель должна переводить предложения на другие языки. Но в целом все языковые модели должны использовать в качестве входных данных последовательности строк, поэтому Unicode — довольно важный шаг. Использование представления Unicode, как правило, является наиболее эффективным выбором.

Здесь мы увидим, как представлять строку в Tensorflow и манипулировать ею с помощью Unicode. Базовый тип TensorFlow tf.string позволяет нам строить тензоры строки байтов. Строки Unicode по умолчанию имеют кодировку UTF-8.

 tf.constant(u"Hello world 🌎") 
 >>> tf.Tensor(b'Hello world \\xf0\\x9f\\x8c\\x8e', shape=(), dtype=string) 

Здесь мы видим, что эмодзи закодирован как «\xf0\x9f\x8c\x8e». Он представлен в UTF-8.

Представительство

Мы можем представить строку Unicode в Tensorflow в двух стандартах:

  • строковый скаляр — где последовательность кодовых точек закодирована с использованием известной кодировки символов (например, Unicode).
  • int32 vector — где каждая позиция содержит одну кодовую точку.

Например, все следующие значения представляют строку Unicode «语言处理» (что означает «языковая обработка» на китайском языке).

 # Строка Unicode, представленная в виде строкового скаляра в кодировке UTF-8 
text_utf8 = tf.constant(u"语言处理")
print(text_utf8)
 >>> tf.Tensor(b'\\xe8\\xaf\\xad\\xe8\\xa8\\x80\\xe5 \\xa4\\x84\\xe7\\x90\\x86', shape=(), dtype=string) 

И мы также можем представить это с помощью UTF-16.

 # Строка Unicode, представленная в виде строкового скаляра в кодировке UTF-16-BE > tf.Tensor(b'\\x8b\\xed\\x8a\\x00Y\\x04t\\x06', shape=(), dtype=string) 

И, наконец, в векторе кодовых точек Unicode.

 # Строка Unicode, представленная в виде вектора кодовых точек Unicode shape=(4,), dtype=int32, numpy=array([35821, 35328, 22788, 29702], dtype=int32) 

Преобразование

Tensorflow предоставляет операции для преобразования между этими различными представлениями:

  • tf. strings.unicode_decode : Преобразует скаляр закодированной строки в вектор кодовых точек.
 text_chars_converted = tf.strings.unicode_decode(text_utf8, input_encoding='UTF-8') 
print(text_chars)
print(text_chars_converted)
 >>> tf.Tensor shape([35821 35328], 29708 4,), dtype=int32) 
>>> tf.Tensor([35821 35328 22788 29702], shape=(4,), dtype=int32)
  • tf.strings.unicode_encode : Преобразует вектор кода указывает на закодированный строковый скаляр.
 text_utf8_converted = tf.strings.unicode_encode(text_chars, output_encoding='UTF-8') 
print(text_utf8)
print(text_utf8_converted)
 >>> tf. Tensor(b'\\xe8\\xaf\\ xad\\xe8\\xa8\\x80\\xe5\\xa4\\x84\\xe7\\x90\\x86', shape=(), dtype=string) 
>>> tf.Tensor(b'\ \xe8\\xaf\\xad\\xe8\\xa8\\x80\\xe5\\xa4\\x84\\xe7\\x90\\x86', shape=(), dtype=string)
  • tf.strings.unicode_transcode : Преобразует закодированный строковый скаляр в другую кодировку.
 text_utf16be_converted = tf.strings.unicode_transcode(text_utf8, input_encoding='UTF-8', output_encoding='UTF-16-BE') 
print(text_utf16be)
print(text_utf16be_converted)
 >>> tfensor(tfensor) >>> tfensor b'\\x8b\\xed\\x8a\\x00Y\\x04t\\x06', shape=(), dtype=string) 
>>> tf.Tensor(b'\\x8b\\xed\\x8a \\x00Y\\x04t\\x06', shape=(), dtype=string)

Длина символа

Мы можем использовать параметр unit операции tf.strings.length , чтобы указать, как следует вычислять длину символов . Значение единицы измерения по умолчанию — «BYTE», но для него можно установить другие значения, такие как «UTF8_CHAR» или «UTF16_CHAR», чтобы определить количество кодовых точек Unicode в каждой закодированной строке.

 # Обратите внимание, что последний символ (эмодзи) занимает 4 байта в UTF8. 
helloWorld = u"Hello World 🌍".encode('UTF-8')
print(helloWorld)
 >>> b'Hello World \\xf0\\x9f\\x8c\\x8d' 
 num_bytes = tf .strings.length(helloWorld).numpy() 
num_chars = tf.strings.length(helloWorld, unit='UTF8_CHAR').numpy()
print('{} байт; {} символов UTF-8'.format( num_bytes, num_chars))
 >>> 16 байт; 13 символов UTF-8 

Если подсчитать количество байтов в строке «Hello World \xf0\x9f\x8c\x8d» (считая каждую букву, пробел и байт), вы увидите, что 16 байтов, как мы видим в выходном коде.

Эта строка содержит 13 символов UTF-8, если считать так же, как и раньше, но считать смайлики одним символом, а не 4 байтами.

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

Строки Unicode | Текст | Модели TensorFlow

NLP часто обрабатывают разные языки с разными наборами символов.

Юникод — это стандартная система кодирования, которая…

www.tensorflow.org

В заключение отметим, что кодирование символов является важным аспектом компьютерных систем и обработки естественного языка (NLP). ASCII — это широко используемый стандарт, который присваивает уникальные номера каждой букве, цифре и символу в тексте, но имеет ограничения в представлении символов. Стандарт Unicode был разработан для устранения ограничений ASCII за счет использования 16-битной схемы кодирования, которая позволяет представлять более 65 000 различных символов и поддерживать текст на любом языке. С тех пор Unicode стал доминирующим стандартом кодирования символов для Всемирной паутины и современных вычислительных систем и имеет важное значение для отображения и обработки текста на самых разных языках и символах. В этой статье мы рассмотрели подробный обзор систем кодирования ASCII и Unicode, а также то, как Tensorflow управляет строками в Unicode.

Если у вас есть сомнения или предложения, оставьте комментарий. Спасибо за прочтение!

Таблица ASCII — Webatic

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

9
г.
Символ Десятичный Шестнадцатеричный URL закодирован Объект HTML
32 20 %20
! 33 21 %21 !
» 34 22 %22 "
# 35 23 %23 #
$ 36 24 %24 $
% 37 25 %25 %
и 38 26 %26 &
39 27 %27 '
( 40 28 %28 (
) 41 29 %29 )
* 42 %2а *
+ 43 %2b +
, 44 %2с ,
45 %2д -
. 46 %2e .
/ 47
%2f
/
0 48 30 %30 0
1 49 31 %31 1
2 50 32 %32 2
3 51 33 %33 3
4 52 34 %34 4
5 53 35 %35 5
6 54 36 %36 6
7 55 37 %37 7
8
56 38 %38 8
9 57 39 %39 9
: 58 %3а :
; 59 %3b ;
< 60 %3c <
= 61 %3d =
> 62 %3e >
? 63 %3f ?
@ 64 40 %40 @
А 65 41 %41 A
Б 66 42 %42 B
С 67 43 %43 C
Д 68 44 %44 D
Е 69 45 %45 E
Ф 70 46 %46 F
Г 71 47 %47 G
Н 72 48 %48
H
я 73 49 %49 I
Дж 74 %4а J
К 75 %4b K
Л 76 %4с L
М 77 %4д M
Н 78 %4e N
О 79 %4f O
П 80 50 %50 P
В 81 51
%51
Q
Р 82 52 %52 R
С 83 53 %53 S
Т 84 54 %54 T
У 85 55 %55 U
В 86 56 %56 V
Ш 87 57 %57 W
Х 88 58 %58 X
Д 89 59 %59 Y
З 90 %5а Z
[ 91 %5b [
94 5e %5e ^
_ 95 %5f _
` 96 60 %60 `
и 97 61 %61 a
б 98 62 %62 b
с 99 63 %63 c
д 100 64 %64 d
и 101 65 %65 e
ф 102 66 %66 f
г 103 67 %67 g
ч 104 68 %68 h
и 105 69 %69 i
и 106 %6а j
к 107 %6b k
л 108 %6с l
м 109 %6д m
п 110 6e %6е n
или 111 %6f o
р 112 70 %70 p
q 113 71 %71 q
р 114 72 %72 r
с 115 73 %73 s
т 116 74 %74 t
и 117 75 %75 u
против 118 76 %76 v
с 119 77 %77 w
х 120 78 %78 x
у 121 79 %79 y
из 122 %7а z
{ 123 %7b {
| 124 %7с |
} 125 %7д
}
~ 126 %7e ~
127 7f %7f 
128 80 %80
129 81 %81
130 82 %82
131 83 %83 ƒ
132 84 %84
133 85 %85
134 86 %86
135 87 %87
136 88 %88 ˆ
137 89 %89
138 %8а Š
139 %8b
140 %8c Œ
141 %8d
142 8e %8e Ž
143 %8f
144
90 %90
145 91 %91
146 92 %92
147 93 %93
148 94 %94
149 95 %95
150 96 %96
151 97 %97
152 98 %98 ˜
153 99 %99
154 %9а š
155 %9b
156 %9с œ
157 %9д
158 %9e ž
159 %9f Ÿ
160 а0 %a0  
161 а1 %a1 ¡
162 а2 %а2 ¢
163 а3 %а3 £
164 а4 %а4 ¤
165 а5 %a5 ¥
166 а6 %а6 ¦
167 а7 %а7 §
168 а8 %а8 ¨
169 а9 %а9 ©
170 аа %aa ª
171 аб %ab «
172 ак %акр ¬
173 объявление % от объявления ­
174 %кэ ®
175 аф % от ¯
176 б0 %b0 °
177 б1 %b1 ±
178 б2 %b2 ²
179 б3 %b3 ³
180 б4 %b4 ´
181 б5 %b5 µ
182 б6 %b6
183 б7 %b7 ·
184 б8 %b8 ¸
185 б9 %b9 ¹
186 ба %ба º
187 бб %bb »
188 г. до н.э. %bc ¼
189 бд %бд ½
190 быть %be ¾
191 бф %бф ¿
192 с0 %с0 À
193 с1 %c1 Á
194 с2 %c2 Â
195 с3 %с3 Ã
196 с4 %с4 Ä
197 с5 %c5 Å
198 с6 %с6 Æ
199 с7 %с7 Ç
200 с8 %с8 È
201 с9 %с9 É
202 ок %ca Ê
203 кб %кб Ë
204 куб. см % куб.см Ì
205 компакт-диск %кд Í
206 %ce Î
207 см. %cf Ï
208 д0 %d0 Ð
209 д1 %d1 Ñ
210 д2 %d2 Ò
211 д3 %d3 Ó
212 д4 %d4 Ô
213 д5 %d5 Õ
214 д6 %d6 Ö
215 д7 %d7 ×
216 д8 %d8 Ø
217 д9 %d9 Ù
218 да %дн Ú
219 дб % дб Û
220 постоянный ток % постоянного тока Ü
221 дд %дд Ý
222 из % от Þ
223 дф %df ß
224 е0 %e0 à
225 е1 %e1 á
226 е2 %e2 â
227 e3 %e3 ã
228 e4 %e4 ä
229 e5 %e5 å
230 е6 %e6 æ
231 e7 %e7 ç
232 e8 %e8 è
233 e9 %e9 é
234 Шт. % шт. ê
235 иб %эб ë
236 эк %эк ì
237 изд % ред í
238 ее %ее î
239 и %еф ï
240 ф0 %f0 ð
241 ф1 %f1 ñ
242 ф2 %f2 ò
243 ф3 %f3 ó
244 ф4 %f4 ô
245 ф5 %f5 õ
246 ф6 %f6 ö
247 ф7 %f7 ÷
248 ф8 %f8 ø
249 ф9 %f9 ù
250 фа %пк ú
251 фб %fb û
252 фк %фк ü
253 фд %fd ý
254 и %fe þ
255 и далее %ff ÿ

Связанные утилиты

HTML Entities Table, Обозреватель кодировок

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

Текущий набор символов/кодировка Юникод (utf-8)Африкаанс (iso-8859-1)Албанский (iso-8859-1)Арабский (win1256)Азербайджанский (iso-8859-9)Баскский (iso-8859-1)Белорусский (win1251)Боснийский (win1250) Португальский (iso-8859-1)Болгарский (koi8-r)Болгарский (win1251)Каталанский (iso-8859-1)Китайский упрощенный (gb2312)Традиционный китайский (big5)Хорватский (iso-8859)-2)Чешский (iso-8859-2)Датский (iso-8859-1)Голландский (iso-8859-1)Голландский (iso-8859-15)Английский (iso-8859-1)Английский (iso-8859-15) )эстонский (iso-8859-1)финский (iso-8859-1)финский (iso-8859-15)французский (iso-8859-1)французский (iso-8859-15)галисийский (iso-8859-1)немецкий (iso-8859-1)Немецкий (iso-8859-15)Греческий (iso-8859-7)Иврит (iso-8859-8-i)Венгерский (iso-8859-2)Индонезийский (iso-8859-1)Итальянский (iso-8859-1)Итальянский (iso-8859-15)Японский (euc)Японский (sjis)Корейский (euc-kr)Латышский (win1257)Литовский (win1257)Малайский (iso-8859-1)Норвежский (iso-8859)-1)Персидский (win1256)Польский (iso-8859-2)Португальский (iso-8859-15)Румынский (iso-8859-1)Русский (cp-866)Русский (koi8-r)Русский (win1251)Сербский (win1251) )Сербская латиница (win1250)Словацкий (iso-8859-2)Словенский (iso-8859-2)Испанский (iso-8859-1)Испанский (iso-8859-15)Шведский (iso-8859-1)Татарский (iso- 8859-9)Тайский (tis-620)Турецкий (iso-8859-9)Украинский (win1251)

Эта страница чувствительна к набору символов вашего ввода.