我正在使用免费的网络主机,但选择不使用任何 Python 框架,并且一直试图将保存在源文件中的中文字符(使用 emacs 保存以 utf-8 编码的文件)打印到生成的 HTML 页面。我认为 Unicode 在 Python 3.1 中“正常工作”,所以我很困惑。我发现了三个不起作用的解决方案。我可能只是遗漏了一两个细节。
主机是 Alwaysdata,它使用起来很简单,所以我对它们如何组合部件的细节知之甚少。我所做的只是将 Python 文件上传或编辑(使用 ssh)到 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"))
导致没有错误,但以下不希望的输出到浏览器:
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 替换 print:
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'>
如何使输出正常工作?我需要使用框架进行快速修复吗?