декодирование и кодирование строки на иврите в 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
׳©׳׳•׳

Как мне правильно это сделать?

Спасибо.


person user1767774    schedule 24.04.2015    source источник
comment
b'\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d' — это байты, составляющие строку utf8. Когда вы печатаете их в виде строки, это выглядит тарабарщиной (в python2 (при условии кодировки по умолчанию std), но будет выглядеть, как в моем комментарии в py3). Если вы затем декодируете эти байты обратно, используя utf8, вы получите строку unicde, с которой вы начали.   -  person paddyg    schedule 24.04.2015
comment
каков результат sys.getdefaultencoding() в вашем терминале?   -  person kasravnd    schedule 24.04.2015
comment
Я получаю строку «ascii».   -  person user1767774    schedule 24.04.2015
comment
Можете ли вы добавить версию Python, которую вы используете, пожалуйста!   -  person go2    schedule 24.04.2015
comment
Это Python 2.7.3, и я использую Pyscripter.   -  person user1767774    schedule 24.04.2015
comment
На 2.7.6 работает нормально! Ваш код выглядит правильно, и между ними не должно быть серьезных различий. Вы пытались запустить это напрямую через интерпретатор Python?   -  person go2    schedule 24.04.2015
comment
```››› word = שלום ››› word '\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d' ››› print word שלום ››› word = word.decode('UTF-8 ') ››› word u'שלום' ››› print word שלום ››› word = word.encode('UTF-8') ››› word '\xd7\xa9\xd7\ x9c\xd7\x95\xd7\x9d' ››› напечатать слово שלום ›››   -  person jonhurlock    schedule 24.04.2015
comment
что, если я хочу записать в один и тот же файл и английский, и иврит? какую кодировку я использую?   -  person Daniel    schedule 06.04.2020


Ответы (1)


Вам нужно будет убедиться, что у вас есть правильная кодировка в вашей среде (оболочке или скрипте). Если вы используете сценарий, включите следующее:

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

Чтобы ваша среда знала, что вы используете UTF-8. Вы можете обнаружить, что ваш терминал оболочки принимает только ASCII, поэтому убедитесь, что он может поддерживать 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
שלום
>>>
person jonhurlock    schedule 24.04.2015