我正在使用免费的Web主机,但选择不使用任何Python框架,并且试图打印保存在源文件中的汉字(使用emacs保存utf-8编码的文件)到生成的HTML页面。我认为Unicode在Python 3.1中“起作用”,所以我很困惑。我发现三种解决方案无效。我可能只是缺少一两个细节。Python 3.1服务器端无法向客户端输出Unicode字符串
主机是Alwaysdata,它的使用非常简单,所以我对他们如何将各部分放在一起的细节知之甚少。我所做的只是上传或编辑(使用ssh)Python文件到www文件夹,更改权限,将浏览器指向正确的URL,并且它可以工作。
我第一次尝试,这对当地IDLE作品(还有服务器的Python的命令行交互shell,这使我更糊涂了,为什么就不能当它传递到浏览器中运行)
#!/usr/bin/python3.1
mystr = "世界好"
print("Content-Type: text/html\n\n")
print("""<!DOCTYPE html>
<html><head><meta charset="utf-8"></head>
<body>""")
print(mystr)
错误是:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3:
ordinal not in range(128)
然后我试图
print(mystr.encode("utf-8"))
资源ulting中没有错误,但下面不期望的输出到浏览器:添加
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c'
三,以下系,但得到了一个错误:
import sys
sys.setdefaultencoding("utf-8")
AttributeError: 'module' object has no attribute 'setdefaultencoding'
最后,f.write更换打印:
import codecs
f = codecs.open(sys.stdout, "w", "utf-8")
mystr = "你好世界"
...
f.write(mystr)
错误:
TypeError: invalid file: <_io.TextIOWrapper name='<stdout>'
encoding='ANSI_X3.4-1968'>
如何获得输出?我需要使用框架来快速修复吗?
你是如何运行代码的?请注意,任何试图避免的解决方案都注定要失败 - 正如[Pragmatic Unicode](http://nedbatchelder.com/text/unipain.html)(无疑在其他地方)中指出的那样,网络连接总是*字节,而不是'unicode'。 – delnan 2012-04-04 15:13:05
我不认为我理解它是如何运行的所有细节。该帐户在Alwaysdata中,我所做的只是将Python文件FTP到www文件夹(或使用ssh编辑),更改权限,然后将浏览器指向该文件。 – 2012-04-04 15:21:40
假设你正在使用CGI,这是一个重复:http://stackoverflow.com/questions/5515007/python-3-cgi-how-to-output-raw-bytes – 2012-04-04 16:54:50