UTF-8百分比编码和python

问题描述 投票:4回答:3

我正在尝试让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 utf-8 url-encoding
3个回答
6
投票

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

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

import urllib

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

给我输出:

%C3%AE

1
投票

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

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

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

还有确保file.py已以utf-8编码保存到磁盘

对我来说,产生:

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

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

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

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

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

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

希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.