Что это?
Unicode — это стандарт кодирования данных с большим диапазоном. Каждому символу Unicode присваивается уникальный код — целое число от 0 до 1 114 111. Эти коды играют важнейшую роль в представлении символов в компьютерных системах, включая операционные системы, веб-браузеры и различные приложения.
Unicode обладает рядом преимуществ по сравнению с альтернативными системами кодирования символов, такими как ASCII и ISO 8859-1. Она обеспечивает всестороннюю поддержку огромного количества символов, охватывая все письменные языки мира. Кроме того, поддержка многобайтовых кодов в Unicode позволяет представлять сложные символы, например, иероглифы.
Однако необходимо подчеркнуть, что Unicode — это не алгоритм кода, а набор кодовых точек, подобно базе данных индикаторов. Поэтому существуют алгоритмы кода, которые используют эту базу, например: UTF—8, UTF—16, UTF—32, UCA, BIDI и т.д.
Как это использовать?
Python уже поддерживает Unicode и имеет в стандартном шаблоне алгоритм UTF—8/16/32, для преобразования данных необходимо использовать несколько инструкций .encode и .decode:
print("That’s data!".encode("utf-16"))
#Вывод b'\xff\xfeT\x00h\x00a\x00t\x00 \x00i\x00s\x00 \x00d\x00a\x00t\x00a\x00!\x00'
На выходе мы видим набор данных, разделенных знаком слеш, а x — это 16-битная система кодирования. Также командой мы можем декодировать в латинские буквы:
print(b'\xff\xfeT\x00h\x00a\x00t\x00 \x00i\x00s\x00 \x00d\x00a\x00t\x00a\x00!\x00'.decode("utf-16"))
#Вывод 'That is data!'
Как мы уже отмечали, Unicode, а значит, UTF—8, поддерживает арабские буквы, иероглифы и большую часть письменного языка:
print("العربية".encode("utf-16"))
#Вывод b"\xff\xfe'\x06D\x069\x061\x06(\x06J\x06)\x06"
И тем же способом, что мы описали выше, декодировать:
print(b"\xff\xfe'\x06D\x069\x061\x06(\x06J\x06)\x06".decode("utf-16"))
#Вывод 'العربية'
Также вы можете не определить алгоритм преобразования значения, например:
print("Hi, my name is Jhon!".encode())
#Вывод b'Hi, my name is Jhon!'
И таким же образом декодировать:
print(b'Hi, my name is Jhon!'.decode())
#Вывод 'Hi, my name is Jhon!'
Существует метод, позволяющий отобразить значение перевода данных в десятичную систему исчисления:
print(list(b"\xff\xfe'\x06D\x069\x061\x06(\x06J\x06)\x06"))
#Вывод [255, 254, 39, 6, 68, 6, 57, 6, 49, 6, 40, 6, 74, 6, 41, 6]
Список может быть полезен в различных сценариях для вашей программы и утилиты. Однако не все алгоритмы используют Unicode одинаково, и если мы попытаемся представить наше текстовое сообщение «Here’s my data!», то получим различный ответ:
print("Here’s my data!".encode("utf-16"))
#Вывод b'\xff\xfeH\x00e\x00r\x00e\x00\x19 s\x00 \x00m\x00y\x00 \x00d\x00a\x00t\x00a\x00!\x00'
И попытка декодирования в utf-8 или utf-32, посмотрим:
print(b'\xff\xfeH\x00e\x00r\x00e\x00\x19 s\x00 \x00m\x00y\x00 \x00d\x00a\x00t\x00a\x00!\x00'.decode("utf-8"))
#Вывод UnicodeDecodeError: 'utf-8' codec can't decode
print(b'\xff\xfeH\x00e\x00r\x00e\x00\x19 s\x00 \x00m\x00y\x00 \x00d\x00a\x00t\x00a\x00!\x00'.decode("utf-32"))
#Вывод UnicodeDecodeError: 'utf-32' codec can't decode
В двух случаях мы получаем сообщения о невозможности декодирования данных таким образом!
Вывод
Unicode — это важнейший стандарт кодирования символов, который охватывает огромное количество письменных языков мира, что делает его доминирующим стандартом для Интернета. Благодаря системному подходу каждому символу Unicode присваивается уникальный код, обеспечивающий его беспрепятственное представление в различных компьютерных системах и приложениях.