Python的CGI脚本在Linux上无法打印希伯来语。
Python的CGI脚本在Linux上无法打印希伯来语。
在Linux上,我无法让Python的CGI将希伯来字符打印到HTML网页上。以下是演示该问题的脚本:\n
#!/usr/bin/python3 print('Content-Type: text/html; charset=utf-8\n\n') print ('') print ('first') print ('second') print ('תמות') print ('third') print ('')
\n该文件以utf-8(无BOM)保存。我直接从浏览器地址栏调用这个.cgi脚本。输出结果为:\n
first second
\n希伯来词和其后的内容都没有显示出来。在apache日志中没有显示任何错误,而且即使启用了cgitb也没有错误。\n我在apache 2.2和python 3.2上进行了测试,分别在Linux ubuntu 12.04和centos 6上使用Firefox、Chrome和IE进行测试。当然,在任何普通的HTML页面上我都可以看到希伯来文字。在Windows上运行得很好。\n编辑:虽然最终解决方案确实在链接的问题中给出,但这仍然不是重复问题。请参阅下面的评论。
问题出现的原因是sys.stdout的默认编码不一定是UTF-8。解决方法是使用sys.stdout.buffer.write,并将字符串编码为UTF-8格式。
以下是解决方法的代码示例:
import sys sys.stdout.buffer.write('תמות'.encode('utf-8'))
如果将所有的print语句替换为sys.stdout.write.buffer(除了第一个print语句,否则会出错),则不会有任何输出。
对于sys.stdout.encoding的打印结果是ANSI_X3.4-1968。
使用sys.stdout.buffer.write的结果是:Traceback (most recent call last): File "