Ho un testo che usa la punteggiatura Unicode, come la virgoletta doppia sinistra, la virgoletta singola destra per l'apostrofo, e così via, e ne ho bisogno in ASCII. Python ha un database di questi personaggi con ovvi sostituti ASCII, quindi posso fare di meglio che girarli tutti in "?" ?Dov'è il database "best ASCII per questo Unicode" di Python?
risposta
Unidecode sembra una soluzione completa. Converte citazioni di fantasia in virgolette ascii, caratteri latini accentati a non accentati e persino tentativi di traslitterazione per trattare personaggi che non hanno equivalenti ASCII. In questo modo i tuoi utenti non devono vedere un sacco di? quando dovevi passare il loro testo attraverso un sistema ASCII legacy a 7 bit.
>>> from unidecode import unidecode
>>> print unidecode(u"\u5317\u4EB0")
Bei Jing
http://www.tablix.org/~avian/blog/archives/2009/01/unicode_transliteration_in_python/
Hm .. le dieresi tedesche vengono convertite nel loro carattere di base anziché ad es. ö = oe, ä = ae, ecc. – ThiefMaster
@ThiefMaster sono gli equivalenti veri in tutte le lingue? Forse Unidecode punta al minimo comune denominatore. –
Unidecode è sicuramente la soluzione indipendente dalla lingua. Per una soluzione in tedesco, converti manualmente i caratteri applicabili ('s/ö/oe /', ecc.) Prima di pulire il resto con 'unidecode'. – alexis
Interessante domanda.
Google ha aiutato a trovare this page che descibes utilizzando il unicodedata module come il seguente:
import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii','ignore')
Utile, ma che elimina la punteggiatura Unicode . – joeforker
Nella mia risposta originale, ho anche suggerito unicodedata.normalize
. Tuttavia, ho deciso di provarlo e risulta che non funziona con le virgolette Unicode. Fa un buon lavoro traducendo caratteri Unicode accentati, quindi suppongo che l'implementazione di unicodedata.normalize
sia stata eseguita utilizzando la funzione unicode.decomposition
, il che mi porta a credere che probabilmente possa gestire solo caratteri Unicode che sono combinazioni di una lettera e un segno diacritico, ma io sono non proprio un esperto sulla specifica Unicode, così ho potuto solo essere pieno di aria calda ...
In ogni caso, è possibile utilizzare unicode.translate
a che fare con i caratteri di punteggiatura, invece. Il metodo translate
prende un dizionario di ordinali Unicode per ordinali Unicode, in tal modo è possibile creare una mappatura che traduce solo Unicode punteggiatura ASCII-compatibile punteggiatura:
'Maps left and right single and double quotation marks'
'into ASCII single and double quotation marks'
>>> punctuation = { 0x2018:0x27, 0x2019:0x27, 0x201C:0x22, 0x201D:0x22 }
>>> teststring = u'\u201Chello, world!\u201D'
>>> teststring.translate(punctuation).encode('ascii', 'ignore')
'"hello, world!"'
È possibile aggiungere ulteriori mappature di punteggiatura, se necessario, ma io don Penso che sia necessario preoccuparsi di gestire ogni singolo carattere di punteggiatura Unicode. Se lo deve gestire accenti e altri segni diacritici, è comunque possibile utilizzare unicodedata.normalize
per gestire tali caratteri.
Vedere anche il pacchetto 'unidecode' – joeforker
C'è una discussione aggiuntiva su questo al http://code.activestate.com/recipes/251871/ che ha la soluzione NFKD e alcuni modi di fare una tabella di conversione, per cose come ± => +/- e altri caratteri non lettera.
- 1. Python: Converti Unicode in ASCII senza errori per file CSV
- 2. Come gestire i caratteri Unicode (non ASCII) in Python?
- 3. Python: Convertire complesso dizionario di stringhe da Unicode a ASCII
- 4. stringa di Python per Unicode
- 5. NSString - Unicode a ASCII equivalente
- 6. Sostituisci caratteri non ascii da una stringa unicode in Python
- 7. Unicode, UTF, ASCII, ANSI differenze di formato
- 8. Python Unicode Codifica errore
- 9. Come sostituire i caratteri Unicode con ASCII
- 10. Python: disinfetti una stringa per unicode?
- 11. Frecce Unicode/ASCII in 8 direzioni?
- 12. Perché dichiarare unicode per stringa in python?
- 13. python 2.7 string.join() con unicode
- 14. Python ASCII Grafico Disegno
- 15. Python Unicode
- 16. Python: creazione di una stringa Unicode
- 17. chr per caratteri non ASCII in Python
- 18. Django: Best practice per il design del database
- 19. Conversione di una stringa Unicode con escape in ASCII
- 20. Python: come ottenere StringIO.writelines per accettare una stringa unicode?
- 21. Come rimuovere estesi ascii usando python?
- 22. Python - Comprimi stringa Ascii
- 23. Esportazione CSV Unicode Python (utilizzando Django)
- 24. Best practice di backup del database grande
- 25. Trasforma stringa unicode in python
- 26. POSIX regex.h fornisce caratteri unicode o sostanzialmente non ASCII?
- 27. Una stringa UNICODE contenente solo caratteri ASCII sarà sempre uguale alla stringa ASCII?
- 28. Best practice per le eccezioni Python?
- 29. Metodo factory per oggetto python - best practice
- 30. Come sostituire i caratteri unicode con caratteri ascii in Python (dato lo script perl)?
Sei coraggioso guerriero. Unicode è l'arcinemico di Python. –
Le persone a cui potrebbe essere interessato [Qual è il modo migliore per rimuovere gli accenti in una stringa unicode Python?] (Http://stackoverflow.com/q/517923/562769) –