【问题标题】:Python CGI script wont print Hebrew on Linux [duplicate]Python CGI脚本不会在Linux上打印希伯来语[重复]
【发布时间】:2012-11-05 17:12:04
【问题描述】:

我无法让 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 时未显示错误

我在 Linux ubuntu 12.04 和 centos 6 以及 Firefox、chrome 和 IE 上使用 apache 2.2 和 python 3.2 进行了测试。当然,我可以在任何普通的 html 页面上看到希伯来语。在 Windows 上它工作得很好。

编辑:虽然链接问题确实给出了最终解决方案,但这仍然不是重复的。请参阅下面的我的 cmets。

【问题讨论】:

  • 当你“查看源代码”时你看到了什么?
  • 这不是重复的。并且引用的问题不能解决我的问题,因为缓冲的输出在这种情况下不起作用。
  • 我同意。这不是重复的,并且 eyaler 给出的解决方案比链接问题中的要好。
  • 我想澄清一下,我认为这个问题不应该被删除。对于这个非常具体的问题,这是一个很棒的标志帖子,可以提供合理的答案。这就是 为什么 问题作为重复而关闭。这就是我做出改变的原因,因为最初的重复关闭没有帮助。

标签: python html linux encoding cgi


【解决方案1】:

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

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

【讨论】:

  • 除了第一个(否则我得到一个错误)的所有打印交换到 sys.stdout.write.buffer,我根本没有输出
  • 您可以将新代码添加到问题中以便我们查看吗?
  • print (sys.stdout.encoding) 给出 ANSI_X3.4-1968
  • with sys.stdout.buffer.write 我得到:回溯(最近一次调用最后):文件“”,第 1 行,在 AttributeError:'_ReplOutput' 对象没有属性'缓冲区'
猜你喜欢
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 2013-12-30
  • 2017-12-29
  • 2012-10-05
  • 2011-06-06
相关资源
最近更新 更多