Nella mia risposta originale, ho anche suggerito unicodedata.normalize
. Tuttavia, ho deciso di provarlo e si è scoperto che non funziona con le virgolette Unicode. Fa un buon lavoro traducendo caratteri Unicode accentati, quindi immagino unicodedata.normalize
sia implementato utilizzando la unicode.decomposition
funzione, il che mi porta a credere che probabilmente possa gestire solo caratteri Unicode che sono combinazioni di una lettera e un segno diacritico, ma non lo sono davvero un esperto della specifica Unicode, quindi potrei essere pieno di aria calda ...
In ogni caso, puoi usare invece unicode.translate
per trattare i caratteri di punteggiatura. Il translate
metodo utilizza un dizionario di ordinali Unicode in ordinali Unicode, quindi puoi creare una mappatura che traduca la punteggiatura solo Unicode in punteggiatura compatibile ASCII:
'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!"'
Puoi aggiungere più mappature di punteggiatura se necessario, ma non penso che tu debba necessariamente preoccuparti di gestire ogni singolo carattere di punteggiatura Unicode. Se non c'è bisogno di accenti maniglia e altri segni diacritici, è comunque possibile utilizzare unicodedata.normalize
per far fronte a tali caratteri.