7

我试图让 python 给我百分比编码的字符串。我正在与之交互的 API(我认为它使用百分比编码的 UTF-8)为 î 提供 %c3%ae。但是,python 的 urllib.quote 给出了 %3F。

import urllib

mystring = "î"
print urllib.quote(mystring)
print urllib.quote_plus(mystring)
print urllib.quote(mystring.encode('utf-8'))

任何帮助表示赞赏。

4

2 回答 2

9

您的文件必须像引用它之前一样对您的字符串进行编码utf-8,并且该字符串应该是 unicode。您还必须在以下部分中为源文件指定适当的文件编码coding

# -*- coding: utf-8 -*-

import urllib

s = u'î'
print urllib.quote(s.encode('utf-8'))

给我输出:

%C3%AE
于 2013-08-10T14:53:49.870 回答
1

那是因为你没有声明你的文件使用的编码,所以 Python 是从你当前的locale配置中推断出来的。我会建议你这样做:

# -*- coding: utf-8 -*-
import urllib

mystring = "î"
print urllib.quote(mystring)
print urllib.quote_plus(mystring)

确保您file.py使用utf-8encoding保存到磁盘。

对我来说,这会产生:

$python ex.py
%C3%AE
%C3%AE

几个警告。如果您从解释器尝试此操作,则# -*- coding: utf-8 -*-如果您的控制台编码不是utf-8. 相反,您应该将其更改为您的控制台使用的任何编码:# -*- coding: (encoding here) -*-.

然后,您应该将您的字符串解码为Unicodeusingdecode方法,并将控制台使用的编码名称作为参数传递给它:

mystring = "î".decode('<your encoding>')

然后将其传递给urllib编码为utf-8

print urllib.quote(mystring.encode('utf-8'))
print urllib.quote_plus(mystring.encode('utf-8'))

希望这可以帮助!

于 2013-08-10T14:59:08.880 回答