WSGI на Python 3 еще не существует. Web-SIG до сих пор не пришел к какому-либо выводу о том, как обрабатывать строки (байты / юникод) в Python 3.x.
wsgiref
- это в основном автоматизированное преобразование 2to3; у него все еще есть проблемы, даже если не учитывать тот факт, что WSGI на 3.x будет означать. Не полагайтесь на это как на ссылку на то, как приложения WSGI будут работать в Python 3.
То, что ситуация все еще , как то, что это входит в цикл выпуска 3.2, смущает и удручает.
return page
Что ж, в то время как WSGI для 3.x все еще остается неизвестным фактором, наиболее единодушным является то, что тело ответа приложения WSGI обычно должно быть байтами, а не юникодом, поскольку HTTP является байтовым протоколом. Будут ли приняты строки Unicode - и если да, то в какую кодировку они будут преобразованы - еще неизвестно, поэтому избегайте проблемы и возвращайте байты:
return [page.encode('utf-8')]
([]
необходимы, потому что приложения WSGI должны возвращать итерацию, которая выводится и сбрасывает элемент за раз. Если вы передаете строку самостоятельно, она используется как итерация и возвращает символ за раз, что ужасно для производительности.)