我正在尝试编写一个简单的聊天系统,该系统接受各种语言并自动翻译,并在其旁边打印原始语言和第二语言(例如英语)。
但是,我遇到了问题的终点,我认为原因是因为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。
答案 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")))