2011-08-05 6 views
2

http GETを使用して私のウェブサイトからデータを取得するスクリプトをプログラミングしています。Pythonの文字列とUTF-8の問題

私の問題は、私はウェブサイトにユニコード文字を渡さなければならないということです。

私はこれらの文字を含むファイルを読んでいます。そして、私は要求をするためにURLを作ります。

ファイルがUTF-8でエンコードされ、私はそれから

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

を読むためにこれを使用して私は、ファイルの最初の行を読んで、私は、URL

sUrl = "http://example.com?word=" 
value = f.readline() 
visitUrl = sUrl + value 
で値を連結しています

私がprint visitUrlを使用する場合、出力は正しいです。すなわちhttp://example.com?word

visiUrlの特殊文字を破壊することなくどのように使用するのですか? 文字列をasciiにエンコードしようとしましたが、すべての文字に対して機能しません。

答えて

3

Quote URL

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

またはURL

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

のクエリ部分を構築するために直接urlencodeを使用し、私はurllibはurllib2のかを選ぶべきなのでしょうか? – kechapito

+1

@messkech:これらの関数は 'urllib'にあります。 'urllib2'という名前は、別のライブラリであることを混乱させないでください。実際には' urllib'の拡張であり、両方のライブラリはPython 3でマージされています。 –

1

文字列を連結して構築するのではなく、urllib.urlencodeでURLを構築します。 URL内の非ASCII文字はURLエンコードされている必要があります。