Как печатать не-ASCII символы в Python - PullRequest
4 голосов
/ 10 ноября 2009

У меня проблема при печати (или записи в файл) не-ASCII символов в Python. Я решил его, переопределив метод str в моих собственных объектах и ​​сделав внутри него «x.encode ('utf-8')», где x - это свойство внутри объекта.

Но если я получу сторонний объект и сделаю "str (object)", а внутри этого объекта будет не-ASCII-символ, он потерпит неудачу.

Таким образом, вопрос заключается в следующем: есть ли способ сообщить методу str, что объект имеет кодификацию UTF-8, в общем? Я работаю с Python 2.5.4.

Ответы [ 5 ]

8 голосов
/ 10 ноября 2009

Нет способа заставить str() работать с Unicode в Python <3.0. </p>

Используйте repr(obj) вместо str(obj). repr() преобразует результат в ASCII, должным образом экранируя все, что не входит в диапазон кода ASCII.

Кроме этого, используйте файловый объект, который разрешает Unicode. Поэтому не кодируйте на входной стороне, а на выходной:

fileObj = codecs.open( "someFile", "w", "utf-8" )

Теперь вы можете записывать строки Unicode в fileObj, и они будут преобразованы по мере необходимости. Чтобы сделать то же самое с print, вам нужно обернуть sys.stdout:

import sys, codecs, locale
print str(sys.stdout.encoding)
sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout)
line = u"\u0411\n"
print type(line), len(line)
sys.stdout.write(line)
print line
3 голосов
/ 01 марта 2017
none_ascii = '''
        ███╗   ███╗ ██████╗ ██╗   ██╗██╗███████╗███████╗ 
        ████╗ ████║██╔═══██╗██║   ██║██║██╔════╝██╔════╝ 
        ██╔████╔██║██║   ██║██║   ██║██║█████╗  ███████╗ 
        ██║╚██╔╝██║██║   ██║╚██╗ ██╔╝██║██╔══╝  ╚════██║ 
        ██║ ╚═╝ ██║╚██████╔╝ ╚████╔╝ ██║███████╗███████║ 
        ╚═╝     ╚═╝ ╚═════╝   ╚═══╝  ╚═╝╚══════╝╚══════╝ 
'''

print(none_ascii.decode('utf-8'))
3 голосов
/ 10 ноября 2009

Как насчет использования unicode(object) и определения метода __unicode__ в ваших классах?

Тогда вы знаете его юникод и можете кодировать его любым способом в файл.

2 голосов
/ 10 ноября 2009

Я хотел бы сказать, что я нашел решение в системах Unix, экспортирующее переменную среды, с этим:

export LC_CTYPE = "es: ES.UTF-8"

Таким образом, все файлы находятся в UTF-8, так что я могу печатать или что-то еще, и это прекрасно работает

0 голосов
/ 02 мая 2015

просто вставьте эти две строки вверху вашего кода

  1. #! / USR / местные / бен / питон
  2. # кодировка: латиница-1

перейдите по этой ссылке для получения более подробной информации https://www.python.org/dev/peps/pep-0263/

...