我試圖編寫一個簡單的聊天系統,它接受各種語言並自動翻譯它們,在它旁邊同時打印原始語言和第二種語言(例如英語) 。Python 2.6.6 Ubuntu服務器os.environ not unicode
但是,我遇到了問題沒有結束,我認爲,原因是因爲Python讀取os.environ作爲ASCII字符串,而不是Unicode。我需要能夠從unicode,utf-8中的Apache中檢索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。
嗯......所以,你是對的。我花了一段時間才意識到這一點,因爲出於某種原因,如果你明確地鍵入了URI(嗯,IRI),它仍然會以???的形式出現,但是如果我提交表單,它確實會轉換成Unicode。 Chrome瀏覽器會讓我明確地鍵入它,但IE和Opera不這樣做。任何想法爲什麼?奇怪的原因是我可以去谷歌翻譯,並在IRI中輸入不同的字符,就可以在那裏使用。這不是必需的功能,但它會很好! – Keozon
@Keozon我知道當你輸入URI時,你會詢問出現在*瀏覽器字段*中的問號。如果我理解正確,那麼這是一個瀏覽器問題,而不是Python。它可能還取決於您的操作系統,因爲操作系統通常會嚮應用程序提供語言支持。 – Louis
不,我的意思是如果我刪除類型()並只是查看實際值,當我通過表單提交時,它很好,但如果我在瀏覽器欄中鍵入它(例如post.py?a =текст)它將顯示爲???,但僅限於某些瀏覽器。如果我得到谷歌,做同樣的事情,所有的瀏覽器在那裏工作(例如,http://translate.google.com/#ru/en/текст) – Keozon