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 se una stringa è vuota in un modo pythonico
- 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
