Converti caratteri Unicode in stringa ASCII in Python
Caratteri Unicode è lo standard di codifica globale per i caratteri per tutte le lingue. A differenza di ASCII, che supporta solo un singolo byte per carattere, i caratteri Unicode estendono questa capacità a 4 byte, facendogli supportare più caratteri in qualsiasi lingua.
Questo tutorial mostra come convertire i caratteri Unicode in una stringa ASCII. L’obiettivo è rimuovere i caratteri che non sono supportati in ASCII o sostituire i caratteri Unicode con il loro carattere ASCII corrispondente.
Usa unicodedata.normalize()
e encode()
per convertire Unicode in una stringa ASCII in Python
Il modulo Python unicodedata
fornisce un modo per utilizzare il database di caratteri in Unicode e funzioni di utilità che aiutano l’accesso, il filtraggio e la ricerca di questi caratteri molto più facilmente.
unicodedata
ha una funzione chiamata normalize()
che accetta due parametri, la forma normalizzata della stringa Unicode e la stringa data.
Esistono 4 tipi di forme Unicode normalizzate: NFC
, NFKC
, NFD
e NFKD
. Per saperne di più su questo, la documentazione ufficiale è prontamente disponibile per una spiegazione completa e approfondita per ogni tipo. Il modulo normalizzato NFKD
verrà utilizzato durante questo tutorial.
Dichiariamo una stringa con più caratteri Unicode.
import unicodedata
stringVal = u"Här är ett exempel på en svensk mening att ge dig."
print(unicodedata.normalize("NFKD", stringVal).encode("ascii", "ignore"))
Dopo aver chiamato il metodo normalize()
, concatena una chiamata alla funzione encode()
, che esegue la conversione da Unicode ad ASCII.
Il carattere u
prima del valore della stringa aiuta Python a riconoscere che il valore della stringa contiene caratteri Unicode; questo viene fatto per scopi di sicurezza del tipo.
Il primo parametro specifica il tipo di conversione e il secondo parametro impone cosa dovrebbe essere fatto se un carattere non può essere convertito. In questo caso, il 2° parametro passa ignore
, che ignora qualsiasi carattere che non può essere convertito.
Produzione:
b'Har ar ett exempel pa en svensk mening att ge dig.'
Si noti che i caratteri Unicode della stringa originale (ä
e å
) sono stati sostituiti con la sua controparte in caratteri ASCII (a
).
Il simbolo b
all’inizio della stringa denota che la stringa è un byte letterale poiché la funzione encode()
è usata sulla stringa. Per rimuovere il simbolo e le virgolette singole che incapsulano la stringa, quindi chiamare a catena la funzione decode()
dopo aver chiamato encode()
per riconvertirla in una stringa letterale.
print(unicodedata.normalize("NFKD", stringVal).encode("ascii", "ignore").decode())
Produzione:
Har ar ett exempel pa en svensk mening att ge dig.
Proviamo un altro esempio usando replace
come secondo parametro nella funzione encode()
.
Per questo esempio, proviamo una stringa con caratteri che non hanno controparti ASCII.
import unicodedata
stringVal = u"áæãåāœčćęßßßわた"
print(unicodedata.normalize("NFKD", stringVal).encode("ascii", "replace").decode())
Tutti i caratteri all’interno di questa stringa di esempio non sono registrati in ASCII ma possono avere un simbolo di controparte.
Produzione:
a??a?a?a??c?c?e??????
Il parametro replace
sostituisce completamente i caratteri senza controparti ASCII con un punto interrogativo ?
simbolo. Se dovessimo usare ignore
sulla stessa stringa:
print(unicodedata.normalize("NFKD", stringVal).encode("ascii", "ignore").decode())
L’output sarà:
aaaacce
Riassumendo, per convertire i caratteri Unicode in caratteri ASCII, usa la funzione normalize()
dal modulo unicodedata
e la funzione encode()
incorporata per le stringhe. Puoi ignore
o replace
i caratteri Unicode che non hanno controparti ASCII. L’opzione ignore
rimuoverà il carattere e l’opzione replace
lo sostituirà con punti interrogativi.
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedInArticolo correlato - Python Unicode
Articolo correlato - Python String
- Come controllare una stringa è vuota in modo pitonico
- Converti una stringa in nome variabile in Python
- Come rimuovere gli spazi bianchi in una stringa in Python
- Estrai numeri da una stringa in Python
- Come convertire una stringa in datario in Python
- Come convertire una stringa in minuscola in Python 2 e 3