2015-04-24 15 views
13

Sto provando a codificare e decodificare la stringa ebraica "שלום". Tuttavia, dopo la codifica, ottengo senza senso:decodifica e codifica stringa ebraica in Python

>>> word = "שלום" 
>>> word = word.decode('UTF-8') 
>>> word 
u'\u05e9\u05dc\u05d5\u05dd' 
>>> print word 
שלום 
>>> word = word.encode('UTF-8') 
>>> word 
'\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d' 
>>> print word 
׳©׳׳•׳ 

Come dovrei farlo in modo appropriato?

Grazie.

+0

b '\ XD7 \ xA9 \ XD7 \ x9c \ XD7 \ x95 \ XD7 \ x9d' sono i byte che compongono la stringa utf8. Quando li si stampa come una stringa, sembra incomprensibile (in python2 (assumendo la codifica standard di default) ma apparirebbe come nel mio commento in py3). Se poi decodifichi quei byte usando utf8, finirai con la stringa unicde da cui hai iniziato. – paddyg

+0

qual è il risultato di 'sys.getdefaultencoding()' nel tuo terminale? – Kasramvd

+0

Ottengo la stringa 'ascii'. – user1767774

risposta

13

Dovrai assicurarti di avere la giusta codifica nel tuo ambiente (shell o script). Se si utilizza uno script sono i seguenti:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

per assicurarsi che il vostro ambiente conosce la vostra utilizzando UTF-8. Potreste scoprire che il terminale della vostra shell si aspetta ASCII, quindi assicuratevi che sia in grado di supportare UTF-8.

>>> word = "שלום" 
>>> word 
'\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d' 
>>> print word 
שלום 
>>> word = word.decode('UTF-8') 
>>> word 
u'\u05e9\u05dc\u05d5\u05dd' 
>>> print word 
שלום 
>>> word = word.encode('UTF-8') 
>>> word 
'\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d' 
>>> print word 
שלום 
>>>