python cgi脚本不会在linux上打印希伯来语

时间:2012-11-16 23:01:33

标签: python html linux encoding cgi

  

可能重复:
  How to make python 3 print() utf8

我无法使用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') 

1 个答案:

答案 0 :(得分:2)

看起来sys.stdout的默认编码不一定是UTF-8。如果你想使用sys.stdout.buffer.write,试试这个:

sys.stdout.buffer.write('תמות'.encode('utf-8'))