Я хочу отправить HTML-страницу в веб-браузер, закодированный как UTF-8. Однако следующий пример не удается:Как кодировать вывод WSGI в UTF-8?
from wsgiref.simple_server import make_server
def app(environ, start_response):
output = "<html><body><p>Räksmörgås</p></body></html>".encode('utf-8')
start_response('200 OK', [
('Content-Type', 'text/html'),
('Content-Length', str(len(output))),
])
return output
port = 8000
httpd = make_server('', port, app)
print("Serving on", port)
httpd.serve_forever()
Вот отслеживающий:
Serving on 8000
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/wsgiref/handlers.py", line 75, in run
self.finish_response()
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/wsgiref/handlers.py", line 116, in finish_response
self.write(data)
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/wsgiref/handlers.py", line 202, in write
"write() argument must be a string or bytes"
Если удалить кодировку и просто вернуть юникод строку Python 3, сервер wsgiref кажется закодировать в любых кодировок в браузере специфицирует в заголовке запроса. Однако я бы хотел, чтобы этот контроль был сам, поскольку я сомневаюсь, что я могу ожидать, что все серверы WSGI будут делать то же самое. Что мне делать, чтобы вернуть HTML-страницу с кодировкой UTF-8?
Спасибо!
Ваш вывод должен быть юникода буквальным, так как (1) вы используете не-ASCII символов в нем и (2), кодирующей его. Вероятно, это не причина вашей текущей проблемы, но когда-нибудь она вас укусит. –
Вы имеете в виду писать строку, такую как u'Räksmörgås '? Мне не нужно это делать, поскольку я нахожусь на Python 3 – pthulin