Python 2.6.6 Ubuntu Server os.environ不是unicode

时间:2013-11-09 12:33:20

标签: python apache unicode utf-8

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

但是,我遇到了问题的终点,我认为原因是因为Python将os.environ读取为字节字符串,而不是Unicode。我需要能够在unicode,utf-8中从Apache检索QUERY STRING环境变量,所以我实际上可以在不同的字符集中获取文本。现在,他们都出现了?

无论如何我可以改变这个,所以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。

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

for key,value in os.environ.items():
    print key + ":"+ str(type(value.decode("utf-8")))