[Python] Domanda facile facile su caso manipolazione unicode

Riccardo Magliocchetti riccardo.magliocchetti a gmail.com
Mer 28 Gen 2015 23:16:29 CET


Ciao Marco,

Il 28/01/2015 18:32, Marco Ippolito ha scritto:
> Scusa se non sono stato chiaro.
>
> Il problema è quello della sostituzione di simboli tipo "”", o tipo
> "č", con simboli pių facilmente manipolabili, esempio "'" e "e'".
> Per cui ho messo queste coppie di simbolo-sostituto all'interno di un file json.

Ho capito che questo č quello che hai fatto. Quello che io mi chiedo č: 
perchč lo devi fare? che problema risolvi facendolo? Spesso perdiamo 
tempo a risolvere problemi che ci auto infliggiamo :)
Posso capire i caratteri unicode ma sostituire i caratteri latini tipo 
le lettere accentate non lo capisco. Devi trasformarli in ASCII o altro 
charset particolare? Se č una questione di encoding, con le stringhe 
unicode in python 2.7 puoi fare cosė per esempio:

 >>> u = u'#ð@đß'
 >>> u.encode('ascii')
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf0' in 
position 1: ordinal not in range(128)
 >>> u.encode('ascii', 'ignore')
'#@'

Dove quello che non riesce a convertire nel charset richiesto viene 
ignorato. Hai altri modi di trattare gli errori, vedi 
https://docs.python.org/2/howto/unicode.html

Detto questo se non puoi perdere pezzi nella traduzione io farei 
qualcosa del genere:

def sanitize(c):
     # TODO: tutti i maneggi con unicode che ti servono
     conv = conversion_table.get(c):
     if conv:
         return  conv
     return c

# puoi anche usare map se ti aggrada
notanunicode_string = ''.join([sanitize(c) for c in unicode_string])

Cosė fai solo un giro per ogni carattere della tua stringa

riccardo


Maggiori informazioni sulla lista Python