
In Python, le funzioni integra chr() ord() vengono utilizzate per e tra punti di codice e caratteri Unicode.
Un carattere può anche essere scritto scrivendo un punto di codice Unicode esadecimale con x, uo U in una stringa letterale.
In questo articolo vengono descritti i seguenti contenuti.
- Converti carattere in punto di codice Unicode:
ord()
- Converti punto di codice Unicode in carattere:
chr()
- Usa i punti di codice Unicode nelle stringhe:
x, u, U
Converti carattere in punto di codice Unicode:ord()
Specificando una stringa di un carattere come argomento di ord(), il punto di codice Unicode del carattere viene restituito come un intero int.
i = ord('A')
print(i)
# 65
print(type(i))
# <class 'int'>
Si verifica un errore se si specifica una stringa di più di due caratteri.
# ord('abc')
# TypeError: ord() expected a character, but string of length 3 found
I punti di codice Unicode sono scritti spesso in notazione esadecimale. Utilizzare la funzione incorporata hex() per un numero intero in una stringa e decimadecimale.
s = hex(i)
print(s)
# 0x41
print(type(s))
# <class 'str'>
La funzione incorporata format() può essere più utilizzata per specificare una formattazione dettagliata, come il riempimento zero e il prefisso 0x.
print(format(i, '04x'))
# 0041
print(format(i, '#06x'))
# 0x0041
In sintesi, il punto di codice Unicode esadecimale per un particolare carattere può essere ottenuto come segue.
print(format(ord('X'), '#08x'))
# 0x000058
print(format(ord('💯'), '#08x'))
# 0x01f4af
Le bandiere e le altre emoji sono rappresentate da più punti di codice Unicode.
Nota che a partire da Python 3.7.3, ord() non supporta tali emoji e viene generato un errore. Se controlli il numero di caratteri di quelle emoji con la funzione incorporata len(), viene restituito il numero di punti di codice Unicode.
# ord('🇯🇵')
# TypeError: ord() expected a character, but string of length 2 found
print(len('🇯🇵'))
# 2
Converti punto di codice Unicode in carattere:chr()
chr() restituisce la stringa str che rappresenta un carattere il cui punto di codice specificato Unicode è l’intero int.
print(chr(65))
# A
print(type(chr(65)))
# <class 'str'>
In Python, un intero può essere scritto in esadecimale con 0x, quindi puoi specificarlo come argomento di chr(). Non importa se è pieno di zero.
print(65 == 0x41)
# True
print(chr(0x41))
# A
print(chr(0x000041))
# A
Se vuoi scegliere una stringa esadecimale che un punto di codice Unicode in un carattere, converti la stringa in un numero intero e poi passala a chr().
Usa int() per una stringa esadecimale in un numero intero. Specificare la radice 16 come secondo argomento.
s = '0x0041'
print(int(s, 16))
# 65
print(chr(int(s, 16)))
# A
Il secondo argomento può essere 0 se la stringa è precedente da 0x. Vedere l’articolo seguente per ulteriori dettagli sulla gestione di numeri e stringhe esadecimali.
I punti di codice Unicode sono spesso scritti sotto forma di U+XXXX. Per scegliere una tale stringa in un carattere di quel punto di codice, seleziona semplicemente la parte numerica della stringa con lo slice.
s = 'U+0041'
print(s[2:])
# 0041
print(chr(int(s[2:], 16)))
# A
Usa i punti di codice Unicode nelle stringhe:x, u, U
Se scrivi x, uo U e un punto di codice Unicode esadecimale in una stringa letterale, viene considerato come quel carattere.
Dovrebbe essere composto da 2, 4 o 8 cifre come xXX, uXXXX e UXXXXXX, rispettivamente. Viene generato un errore se il numero di cifre non è corretto.
print('x41')
# A
print('u0041')
# A
print('U00000041')
# A
print('U0001f4af')
# 💯
# print('u041')
# SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-4: truncated uXXXX escape
# print('U0000041')
# SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-8: truncated UXXXXXXXX escape
Ogni codice viene trattato come un carattere. Puoi verificarlo con la funzione incorporata len() che contiene il numero di caratteri.
print('u0041u0042u0043')
# ABC
print(len('u0041u0042u0043'))
# 3
Si noti che nelle stringhe non elaborate in cui le sequenze di escape sono disabilitate, la stringa viene trattata così com’è.
print(r'u0041u0042u0043')
# u0041u0042u0043
print(len(r'u0041u0042u0043'))
# 18