On Thu, Mar 05 2015, Walter Valenti wrote: > python 2.7 > > Ho il seguente: > import locale, datetime > locale.setlocale(locale.LC_ALL,'it_IT.UTF-8') > now = datetime.datetime.now().strftime("%Y-%m-%d %A %H:%M:%S") > > now è viene restituito di tipo "str". > > Se cerco di convertirlo in unicode, > mediante unicode(now) mi da un errore > UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 > dovuto alla 'ì'. > > Come faccio a farmi restituire uno 'unicode'?
Bella domanda, provo a risponderti ma con un grosso punto interrogativo alla fine, perché non sono sicuro della correttezza della risposta. Spero che qui nella lista confermino o smentiscano quanto dico. 1. Tu setti il locale come costante. Benché possa funzionare nei sistemi di tuo interesse, non è una buona pratica. Meglio è lasciare che ciascuno scelga il proprio locale e usare quello. LA documentazione riporta: Normalmente gli applicativi iniziano con una chiamata del tipo: import locale locale.setlocale(locale.LC_ALL, "") Questo perché, se qualcuno non ha installato il locale in questione, si ritroverà con un bel messaggio di errore. 2. Quando hai una stringa devi decodificarla dal locale corrente, per poter avere un oggetto di tipo unicode: nowu = unicode(now, curlocale) nowu = now.decode(curlocale) 3. Come fai a determinare il locale corrente? Per quando io ne sappia ci sono tre modi e non sono sicuro di quale sia quello giusto. locale.getdefaultlocale()[1] locale.getpreferredencoding() sys.stdin.encoding Questo è quanto riporta il mio sistema. Come vedi i tre risultati sono uguali: >>> sys.stdin.encoding 'UTF-8' >>> locale.getpreferredencoding() 'UTF-8' >>> locale.getdefaultlocale() ('it_IT', 'UTF-8') >>> m. _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python