UTF-8百分比编码和python

UTF-8百分比编码和python,python,utf-8,url-encoding,Python,Utf 8,Url Encoding,我试图让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')) 感谢您的帮助。您的文件在引用字符串

我试图让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'))

感谢您的帮助。

您的文件在引用字符串之前必须将字符串编码为
utf-8
,并且字符串应为unicode。您还必须在
编码
部分为源文件指定适当的文件编码:

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

import urllib

s = u'î'
print urllib.quote(s.encode('utf-8'))
给我输出:

%C3%AE

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

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

mystring = "î"
print urllib.quote(mystring)
print urllib.quote_plus(mystring)
另外,请确保您的
文件.py
已使用
utf-8
编码保存到磁盘

对我来说,这意味着:

$python ex.py
%C3%AE
%C3%AE
有几个警告。如果您在解释器中尝试此操作,如果您的控制台编码不是
utf-8
,则
-*-编码:utf-8-*-
将无法工作。相反,您应该将其更改为您的控制台正在使用的任何编码:
#-*-coding:(此处编码)-*-

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

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

希望这有帮助

我已经执行了你的代码,它会打印
%C3%AE
<代码>%3F,顺便说一句,是
字符编码的。您确定您的脚本保存为
utf-8
编码文件吗?不,是ANSI格式。谢谢请注意,在Python3中,这将是
导入urllib.parse
,然后是
urllib.parse.quote
。谢谢。文件是ANSI,因此出现了问题。
print urllib.quote(mystring.encode('utf-8'))
print urllib.quote_plus(mystring.encode('utf-8'))