Python 3.4 在 Apache2 服务器 (Mac) 上导致 UnicodeEncodeError 但在命令行中工作正常

标签 python apache python-2.7 python-3.x unicode

我正在尝试让 Python 3.4 cgi 脚本和 Apache 在浏览器中输出一个“ü”字符(就此而言,任何其他 Unicode 字符都会出现同样的问题)。 python 3.4 cgi 脚本在 Apache 中导致 UnicodeEncodeError,而类似的 python 2.7 代码在同一台服务器上运行良好。脚本 3.4 和 2.7 从命令行都可以正常工作。

这是我在运行 python 3.4 脚本时遇到的错误:

UnicodeEncodeError: 'ascii' 编解码器无法对位置 23 中的字符 '\xfc' 进行编码:序号不在范围内 (128)

这是导致该错误的代码:

#!/usr/local/bin/python3
# -*- coding: utf-8 -*-

print ("Content-Type: text/html; charset=utf-8\n\n")
print ("""\
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
""")

print ("U umlaut (Python 3.4): ü<br>")

print ("""\
</body>
</html>
""")

同一服务器上的以下 Python 2.7 脚本正确显示 ü 和任何其他 Unicode 字符: (所以这不是 Apache 的问题?)

#!/usr/bin/python
# -*- coding: utf-8 -*-

print "Content-Type: text/html; charset=utf-8\n\n"
print """\
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
"""

print "U umlaut (Python 2.7): ü<br>"

print """\
</body>
</html>
"""

这两个脚本都可以在命令行中正常工作。我已经有了

AddDefaultCharset UTF-8

在我的 httpd.conf 中。

此外,我的语言环境变量设置如下:

LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

A 已经在我能想到的所有地方包含了 UTF-8 设置(有时过多)。有谁知道我还能做些什么来让 python 3.4 脚本在浏览器中正确显示 Unicode 字符?谢谢。

最佳答案

我知道你的问题已经过了几个月了,但我遇到同样的问题时无意中发现了它。我找到了解决方案。也许它对您没有帮助,但对其他寻求者没有帮助。

Jack O'Connor's solution fixed the problem for me试试这个:

import sys
sys.stdout = open(sys.stdout.fileno(), mode='w', encoding='utf8', buffering=1)
print("日本語")
# Also works with other methods of writing to stdout:
sys.stdout.write("日本語\n")
sys.stdout.buffer.write("日本語\n".encode())`

关于Python 3.4 在 Apache2 服务器 (Mac) 上导致 UnicodeEncodeError 但在命令行中工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24095382/

相关文章:

python - "Cannot deserialize instance of string from START_ARRAY value"Salesforce API问题

Python - 按行比较两个二维数组

python - 仅处理 Django 中查询集的子集(并返回原​​始查询集)

python - Pandas 箱线图上出现奇怪的标记

python - IOError : [Errno 13]

apache - HTTP 状态 500 org.apache.jasper.JasperException : Unable to compile class for JSP:

python - 传递 bool 条件作为参数

python - 有什么方法可以从两个数据帧创建一个新的数据帧,其中一个 df 的每一行都必须重复?

python - (Ubuntu) Python3 脚本运行良好,但在 Apache/wsgi 下找不到 selenium 模块

php - Xdebug 和 PHP 无法在我的服务器上运行