pythonCGI脚本不会在Linux上打印希伯来语

可能重复:
如何使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和IEtesting。 当然,我可以在任何纯HTML页面上看到希伯来语。 在Windows上它工作得很好。

解:

 import sys print (sys.stdout.encoding) 

给我:

 ANSI_X3.4-1968 

最后这解决了我的问题:

 import sys, codecs sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach()) 

这是另一个select:

 import sys, io sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8') 

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

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