Python 3 CGI: как выводить необработанные байты - PullRequest
4 голосов
/ 01 апреля 2011

Я решил использовать Python 3 для создания своего сайта, но я столкнулся с проблемой с выводом Unicode.

Кажется, что обычный print(html) #html is astr должен работать, ноэто не.Я получаю UnicodeEncodeError: 'ascii' codec can't encode characters[...]: ordinal not in range(128).Это должно быть потому, что веб-сервер не поддерживает вывод Unicode.

Следующее, что я попробовал, было print(html.encode('utf-8')), но я получил что-то вроде repr вывода строки байта: он помещенвнутри b'...' и все escape-символы находятся в необработанном виде (например, \n и \xd0\x9c)

Пожалуйста, покажите мне правильный способ вывода строки Unicode ( str ) какнеобработанная строка в кодировке UTF-8 байтов в Python 3.1

1 Ответ

7 голосов
/ 01 апреля 2011

Проблема в том, что вы не подключены к реальному терминалу и по умолчанию будете использовать кодировку ASCII. Поэтому вам нужно записать в sys.stdout.buffer, который является «сырым» двоичным выходом sys.stdout. Это можно сделать различными способами, наиболее распространенным из которых является:

import codecs, sys
writer = codecs.getwriter('utf8')(sys.stdout.buffer)

И писатель пользы. В сценарии CGI вы можете заменить sys.stdout на записывающее устройство так:

sys.stdout = codecs.getwriter('utf8')(sys.stdout.buffer)

Может сработать, чтобы вы могли печатать нормально. Попробуйте это!

...