2011-08-05 42 views
2

我正在編寫一個腳本,它將使用http GET從我的網站獲取一些數據。Python字符串和UTF-8問題

我的問題是,我必須將unicode字符傳遞到網站。

我正在閱讀包含這些字符的文件,然後嘗試生成一個url以便發出請求。

該文件是UTF-8編碼和我使用此來讀取它

f = codecs.open("values.txt", encoding='utf-8') 

然後我讀取文件的第一行和我與鏈接

sUrl = "http://example.com?word=" 
value = f.readline() 
visitUrl = sUrl + value 
串接值

如果我使用print visitUrl輸出是正確的。即http://example.com?word

如何在不破壞我的特殊字符的情況下使用visiUrl? 我試圖將字符串編碼爲ascii,但它不適用於所有字符。

回答

3

Quote網址

import urllib 
s = u'Здравей' 
urllib.quote(s.encode('utf-8')) 
# %D0%97%D0%B4%D1%80%D0%B0%D0%B2%D0%B5%D0%B9 

,或者使用直接urlencode打造的URL

urllib.urlencode({'data': s.encode('utf-8')}) 
# 'data=%D0%97%D0%B4%D1%80%D0%B0%D0%B2%D0%B5%D0%B9' 
+0

我應該選擇的urllib或urllib2的查詢部分? – kechapito

+1

@messkech:這些函數在'urllib'中。不要讓'urllib2'的名稱讓你困惑,它是一個替代庫 - 它實際上是'urllib'的擴展,並且這兩個庫已經在Python 3中合併了。 –

1

使用urllib.urlencode構建URL,而不是試圖通過連接字符串來構造它。 URL中的非ASCII字符需要進行URL編碼。