Python 3 CGI:如何输出原始字节

Ole*_*pin 4 unicode webserver encoding utf-8 python-3.x

我决定使用Python 3来制作我的网站,但我遇到了Unicode输出的问题.

似乎普通print(html) #html is astr应该工作,但事实并非如此.我得到UnicodeEncodeError: 'ascii' codec can't encode characters[...]: ordinal not in range(128).这必须是因为Web服务器不支持unicode输出.

我尝试的下一件事是print(html.encode('utf-8')),但我得到了类似字节字符串的repr输出:它放在里面b'...',所有转义字符都是原始形式(例如\n\xd0\x9c)

请告诉我在Python 3.1中输出Unicode(str)字符串作为原始UTF-8编码字节字符串的正确方法

Len*_*bro 7

这里的问题是你的stdout没有附加到实际的终端,默认情况下会使用ASCII编码.因此,您需要写入sys.stdout.buffer,它是sys.stdout的"原始"二进制输出.这可以通过各种方式完成,最常见的方式似乎是:

import codecs, sys
writer = codecs.getwriter('utf8')(sys.stdout.buffer)
Run Code Online (Sandbox Code Playgroud)

和使用作家.在CGI脚本中,您可以将sys.stdout替换为writer,以便:

sys.stdout = codecs.getwriter('utf8')(sys.stdout.buffer)
Run Code Online (Sandbox Code Playgroud)

可能实际上工作,所以你可以正常打印.试试吧!