Python字符串和UTF-8问题
我正在编写一个脚本,目的是通过http GET从我的网站获取一些数据。
我遇到的问题是需要将unicode字符传递给网站。
我正在读取一个包含这些字符的文件,然后试图生成一个网址来发送请求。
这个文件是用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,但并不是所有字符都能正常工作。
2 个回答
1
用 urllib.urlencode 来构建网址,而不是通过简单地把字符串拼接在一起。网址中的非ASCII字符需要进行网址编码。
3
对网址进行“编码”,让它变得安全可用。
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”来构建网址中的查询部分。
urllib.urlencode({'data': s.encode('utf-8')})
# 'data=%D0%97%D0%B4%D1%80%D0%B0%D0%B2%D0%B5%D0%B9'