我无法使用python cgi将希伯来字符打印到linux上的html网页。这是一个演示问题的脚本:
#!/usr/bin/python3
print('Content-Type: text/html; charset=utf-8\n\n')
print ('<html><body>')
print ('first')
print ('second')
print ('תמות')
print ('third')
print ('</body></html>')
文件保存在utf-8(无BOM)中。我直接从浏览器地址栏调用此.cgi脚本。输出是:
first second
虽然希伯来词和随后的内容都缺失了。在apache日志中或启用了cgitb时没有显示错误
我使用apache 2.2和python 3.2在linux ubuntu 12.04和centos 6上测试,使用firefox,chrome和IE。当然,我可以在任何简单的HTML页面上看到希伯来语。在Windows上它工作正常。
溶液
import sys
print (sys.stdout.encoding)
给了我:
ANSI_X3.4-1968
最后这解决了我的问题:
import sys, codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach())
这是另一种选择:
import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8')
答案 0 :(得分:2)
看起来sys.stdout的默认编码不一定是UTF-8。如果你想使用sys.stdout.buffer.write,试试这个:
sys.stdout.buffer.write('תמות'.encode('utf-8'))