0

我正在尝试编写一个简单的聊天系统,它接受各种语言并自动翻译它们,在其旁边打印原始语言和第二语言(例如英语)。

但是,我遇到了无穷无尽的问题,我认为原因是因为 Python 将 os.environ 读取为 ASCII 字节字符串,而不是 Unicode。我需要能够从 Apache 中以 unicode、utf-8 检索 QUERY STRING 环境变量,这样我才能真正获取不同字符集中的文本。现在,它们都显示为 ?s。

无论如何我可以改变这个,所以python可以在unicode中读取os.environ?是 Apache、Linux 还是 Python 本身的问题?我已经在谷歌搜索了几个小时,大部分答案都是关于 python 3,我很犹豫要升级到它(但如果没有其他选择的话会)。

我让 Apache 将所有字符集覆盖为 utf-8,所以我的所有页面都是这样强制的。

这是我非常简单的测试 HTML:

<form action=exec/post.py method=post><input type=text name='a'><input type=submit></form>

这是它调用的 post.py:

#!/usr/bin/python
import os
import urllib2

print "Content-Type: text/html; charset=utf-8"
print
for key,value in os.environ.items():
        print key + ":"+ str(type(value))

然后,如果您查看输出的来源,它会将类型显示为 str,而不是 unicode。

4

2 回答 2

0

os.environ始终仅是字节,URL 和查询字符串也是如此。

您需要在自己的代码中解码此类信息:

print u'{0}: {}'.format(key, value.decode('utf8'))

这是流(网络连接、文件、管道等)如何工作的基础;它们总是包含字节。这些字节可以用不同的方式解释,如果它们包含 Unicode 值,则需要显式解码它们。

于 2013-11-09T12:35:49.363 回答
0

无需为此升级到 Python 3。您需要对字符串进行解码以获取 Unicode 值。这将显示所有值现在是unicode

for key,value in os.environ.items():
    print key + ":"+ str(type(value.decode("utf-8")))
于 2013-11-09T12:37:08.113 回答