Skip to content

Convertire un punto di codice Unicode e un carattere tra loro (chr, ord)

Python

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