Рубрики
Без рубрики

Unicode В Python – Модуль unicodedata Объяснен

Эй, ребята! В этом уроке мы узнаем о Юникоде в Python и свойствах символов Юникода. Итак, давайте начнем.

Автор оригинала: Pankaj Kumar.

Эй, ребята! В этом уроке мы узнаем о Юникоде в Python и свойствах символов Юникода. Итак, давайте начнем.

Что такое Юникод?

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

Кодовая точка-это целочисленное значение в диапазоне от 0 до 0x10FFFF в шестнадцатеричном кодировании.

Чтобы начать использовать символы Юникода в Python, нам нужно понять, как модуль string интерпретирует символы.

Как интерпретировать ASCII и Unicode в Python?

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

import string

print(string.ascii_lowercase) 
print(string.ascii_uppercase)
print(string.ascii_letters)
print(string.digits)
print(string.hexdigits)
print(string.octdigits)
print(string.whitespace)  
print(string.punctuation)

Выход:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
0123456789abcdefABCDEF
01234567
 	
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

Мы можем создавать односимвольные строки Юникода с помощью встроенной функции chr () . Он принимает в качестве аргумента только одно целое число и возвращает юникод данного символа.

Аналогично, odr ()-это встроенная функция, которая принимает односимвольную строку Юникода в качестве входных данных и возвращает значение кодовой точки.

chr(57344)
ord('\ue000')

Выход:

'\ue000'
57344

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

Строка-это последовательность кодовых точек Юникода. Эти кодовые точки преобразуются в последовательность байтов для эффективного хранения. Этот процесс называется кодированием символов.

Существует множество кодировок,таких как UTF-8,UTF-16, ASCII и т. Д.

По умолчанию Python использует кодировку UTF-8.

Что такое кодировка UTF-8?

UTF-8 является наиболее популярным и часто используемым для кодирования символов. UTF расшифровывается как Формат преобразования Юникода , а “8” означает, что в кодировке используются 8-битные значения|/.

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

Первые 128 кодовых точек в наборе символов UTF-8 также являются допустимыми символами ASCII. Символ в UTF-8 может иметь длину от 1 до 4 байт.

Кодирование символов в UTF-8 с помощью функции Python encode()

Метод encode() преобразует любой символ из одной кодировки в другую. Синтаксис функции кодирования выглядит следующим образом –

string.encode(encoding='UTF-8',errors='strict')

Параметры :

  • кодировка – это кодировка, которая будет использоваться и поддерживается python.
  • ошибки – Список различных типов ошибок приведен ниже
  1. strict- Ошибка по умолчанию – strict , которая вызывает UnicodeDecodeError при сбое.
  2. игнорировать – Игнорирует не поддающийся кодированию юникод из результата.
  3. заменить – Заменяет undecodable unicode на ‘?’
  4. xmlcharrefreplace- Вставляет ссылку на символ xlm вместо undecodable unicode.
  5. backslashreplace- Вставки \uNNNN escape-последовательности вместо undecodable unicode.
  6. имя заменить- Вставляет \N{…} escape-последовательность вместо undecodable unicode.

Как использовать Unicode в Python с функцией encode ()?

Теперь давайте перейдем к пониманию того, как функция кодирования строк может позволить нам создавать строки unicode в Python.

1. Закодируйте строку в кодировку UTF-8

string = 'örange'
print('The string is:',string)
string_utf=string.encode()
print('The encoded string is:',string_utf)

Выход:

The string is: örange
The encoded string is: b'\xc3\xb6range'

2. Кодирование с параметром ошибки

Давайте закодируем немецкое слово weiß, которое означает белый.

string = 'weiß'

x = string.encode(encoding='ascii',errors='backslashreplace')
print(x)

x = string.encode(encoding='ascii',errors='ignore')
print(x)

x = string.encode(encoding='ascii',errors='namereplace')
print(x)

x = string.encode(encoding='ascii',errors='replace')
print(x)

x = string.encode(encoding='ascii',errors='xmlcharrefreplace')
print(x)

x = string.encode(encoding='UTF-8',errors='strict')
print(x)

Выход:

b'wei\\xdf'
b'wei'
b'wei\\N{LATIN SMALL LETTER SHARP S}'
b'wei?'
b'weiß'
b'wei\xc3\x9f'

Модуль unicodedata для работы с Юникодом в Python

Модуль unicodedata предоставляет нам базу данных символов Unicode (UCD) , которая определяет все свойства символов всех символов Unicode.

Давайте рассмотрим все функции, определенные в модуле, на простом примере, чтобы объяснить их функциональность. Мы можем эффективно использовать Unicode в Python с помощью следующих функций.

1. unicodedata.поиск(имя)

Эта функция ищет символ по заданному имени. Если символ найден, возвращается соответствующий символ. Если не найдено, то вызывается Keyerror.

import unicodedata 
   
print (unicodedata.lookup('LEFT CURLY BRACKET')) 
print (unicodedata.lookup('RIGHT SQUARE BRACKET')) 
print (unicodedata.lookup('ASTERISK'))
print (unicodedata.lookup('EXCLAMATION MARK'))

Выход:

{
]
*
!

2. unicodedata.name(chr[, по умолчанию])

Эта функция возвращает имя, присвоенное символу chr в виде строки. Если имя не определено, оно возвращает значение по умолчанию, в противном случае оно вызывает ошибку Keyerror.

import unicodedata 
   
print (unicodedata.name(u'%')) 
print (unicodedata.name(u'|')) 
print (unicodedata.name(u'*')) 
print (unicodedata.name(u'@'))

Выход:

PERCENT SIGN
VERTICAL LINE
ASTERISK
COMMERCIAL AT

3. unicodedata.decimal(chr[, по умолчанию])

Эта функция возвращает десятичное значение, присвоенное символу chr . Если значение не определено, то возвращается значение по умолчанию, в противном случае возникает ошибка Keyerror, как показано в примере ниже.

import unicodedata
   
print (unicodedata.decimal(u'6'))
print (unicodedata.decimal(u'b')) 

Выход:

6
Traceback (most recent call last):
  File "D:\DSCracker\DS Cracker\program.py", line 4, in 
    print (unicodedata.decimal(u'b')) 
ValueError: not a decimal

4. unicodedata.digit(chr[, по умолчанию])

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

import unicodedata 
   
print (unicodedata.decimal(u'9')) 
print (unicodedata.decimal(u'0')) 
print (unicodedata.decimal(u'20'))

Выход:

9
0
Traceback (most recent call last):
  File "D:\DSCracker\DS Cracker\program.py", line 5, in 
    print (unicodedata.decimal(u'20'))
TypeError: decimal() argument 1 must be a unicode character, not str

5. unicodedata.numeric(chr[, по умолчанию])

Эта функция возвращает числовое значение, присвоенное символу chr , в виде целого числа. Если значение не определено, то оно возвращает значение по умолчанию, в противном случае возникает ошибка ValueError.

import unicodedata 
   
print (unicodedata.decimal(u'1'))
print (unicodedata.decimal(u'8'))
print (unicodedata.decimal(u'123'))

Выход:

1
8
Traceback (most recent call last):
  File "D:\DSCracker\DS Cracker\program.py", line 5, in 
    print (unicodedata.decimal(u'123')) 
TypeError: decimal() argument 1 must be a unicode character, not str

6. unicodedata.category(char)

Эта функция возвращает общую категорию, присвоенную символу chr в виде строки. Он возвращает “L” для буквы и ” u “для верхнего регистра и” l ” для нижнего регистра.

import unicodedata 
   
print (unicodedata.category(u'P')) 
print (unicodedata.category(u'p')) 

Выход:

Lu
Ll

7. unicodedata.двунаправленный(chr)

Эта функция возвращает двунаправленный класс, назначенный символу chr в виде строки. Эта функция возвращает пустую строку, если такое значение не определено.

AL обозначает арабскую букву, AN обозначает арабское число, а L обозначает слева направо и т. Д.

import unicodedata 
   
print (unicodedata.bidirectional(u'\u0760'))

print (unicodedata.bidirectional(u'\u0560')) 

print (unicodedata.bidirectional(u'\u0660')) 


Выход:

AL
L
AN

8. unicodedata.combining(chr)

Эта функция возвращает канонический класс объединения, присвоенный данному символу chr в виде строки. Он возвращает 0, если класс объединения не определен.

import unicodedata 
   
print (unicodedata.combining(u"\u0317"))

Выход:

220

9. unicodedata.mirrored(chr)

Эта функция возвращает свойство mirrored , присвоенное данному символу chr в виде целого числа. Он возвращается 1 если символ идентифицирован как ” зеркально отраженный ” в двунаправленном тексте или иначе он возвращается 0 .

import unicodedata 
   
print (unicodedata.mirrored(u"\u0028"))
print (unicodedata.mirrored(u"\u0578"))

Выход:

1
0

10. unicodedata.normalize(форма, unistr)

Использование этой функции возвращает обычную форму для строки Unicode unistr. Допустимыми значениями для формы являются “NFC”, “NFKC”, ” NFD ” и “NFKD”.

from unicodedata import normalize 
   
print ('%r' % normalize('NFD', u'\u00C6')) 
print ('%r' % normalize('NFC', u'C\u0367')) 
print ('%r' % normalize('NFKD', u'\u2760')) 

Выход:

'Æ'
'Cͧ'
'❠'

Вывод

В этом уроке мы узнали о unicode и модуле базы данных unicode, который определяет характеристики unicode. Надеюсь, вам всем понравилось. Оставайтесь С Нами 🙂

Рекомендации

Официальные документы Unicode

База данных Unicode