Python的CGI脚本在Linux上无法打印希伯来语。

7 浏览
0 Comments

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编辑:虽然最终解决方案确实在链接的问题中给出,但这仍然不是重复问题。请参阅下面的评论。

0
0 Comments

问题出现的原因是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 "", line 1, in AttributeError: '_ReplOutput' object has no attribute 'buffer'

0