Unicode и кодировка для персидского или арабского в python3

некоторый фрагмент кода, подобный этому:

city_name = obj['city_from']['name'].encode('utf-8')
            print(city_name)

Выход из этого кода:

b'\xd8\xa8\xd9\x86\xd8\xaf\xd8\xb1\xd8\xb9\xd8\xa8\xd8\xa7\xd8\xb3'

и если я удаляю вывод encode ('utf-8'), измените его следующим образом:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)

этот выходной язык является персидским (например, арабским), мне интересно, почему класс string в python3 не имеет какого-либо метода декодирования? У вас есть какие-либо решения этой проблемы?

спасибо

Ответ 1

okey я нашел свое решение и работает как шарм

import sys
sys.stdout.buffer.write(TestText2)

UPDATE: эта проблема для среды ZSH script, я использую bash и все находит.

Ответ 2

Ваш ответ показывает, что ваш терминал принимает последовательности байтов utf-8.

Вам не нужно преобразовывать строку Unicode в байты перед их печатью. Python делает это за вас.

Изменить кодировку символов, используемую Python для ввода-вывода; установите переменную окружения PYTHONIOENCODING=utf-8 или измените настройки локали.

Похоже, что sys.stdout.encoding есть ascii в вашем случае.

$ python3 -c'import sys; print(sys.stdout.encoding)' 
UTF-8
$ python3 -c'import sys; print(sys.stdout.encoding)' | cat
ascii
$ LC_CTYPE=C python3 -c'import sys; print(sys.stdout.encoding)' 
ANSI_X3.4-1968

ANSI_X3.4-1968 является каноническим именем для ascii.

$ PYTHONIOENCODING=uTf-8 python3 -c'import sys; print(sys.stdout.encoding)' | cat
uTf-8
$ LC_CTYPE=C.UTF-8 python3 -c'import sys; print(sys.stdout.encoding)' 
UTF-8

Не кодируйте кодировку символов внутри своих скриптов. Распечатайте строки Unicode и настройте свою среду соответственно