Python字符串和UTF-8问题

2 投票
2 回答
920 浏览
提问于 2025-04-16 22:57

我正在编写一个脚本,目的是通过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'

撰写回答