【问题标题】:UTF-8 percentage encoding and pythonUTF-8 百分比编码和 python
【发布时间】:2013-08-10 14:46:48
【问题描述】:

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

任何帮助表示赞赏。

【问题讨论】:

  • 我已经执行了你的代码,它打印出%C3%AE%3F,顺便说一句,是? char 编码的。

标签: python utf-8 url-encoding


【解决方案1】:

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

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

import urllib

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

给我输出:

%C3%AE

【讨论】:

  • 您确定您的脚本保存为utf-8 编码文件吗?
  • 不,在 ANSI 中。谢谢!
  • 请注意,在 Python3 中,这将是 import urllib.parse,然后是 urllib.parse.quote
【解决方案2】:

那是因为你没有声明你的文件使用的编码,所以 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

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

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

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

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

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

希望这会有所帮助!

【讨论】:

  • 谢谢。文件是 ANSI,因此出现了问题。
猜你喜欢
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
  • 2014-01-24
  • 2018-01-14
  • 1970-01-01
  • 2013-05-11
相关资源
最近更新 更多