【问题标题】:Python urllib2 and urlopen with utf-8 signs [duplicate]带有 utf-8 符号的 Python urllib2 和 urlopen [重复]
【发布时间】:2015-06-01 12:08:38
【问题描述】:

如何将 unicode 字符串传递给 urllib2.urlopen(url) 函数?

我想访问一个带有 utf-8 编码 URL 的 pdf 文件:

<a href="investments-%C2%A7-73g-legal.html">Link to pdf</a>

%C2%A7 代表截面符号:§

如果我将此 unicode url 字符串传递给 urlopen 方法,它会引发异常:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa7' in position 105: ordinal not in range(128)

如果我忽略编码错误:url.encode("ascii",errors='ignore') 链接地址不再有效。

谁能告诉我如何解决这个问题?

非常感谢

【问题讨论】:

  • 你到底传递了什么给urlopen()?请给我们print(repr(url_you_used))的输出好吗?
  • u'177.23.125.41/2013-12-20-investments-\xa7-7g-legal-zwe.pdf'

标签: python unicode encoding urllib2


【解决方案1】:

尝试按照这些思路进行操作,在 b 中,您将找到一个适合 urllib2 的 utf8 字符串(不过,您必须使用有意义的位置来完成它......)。顺便说一句,打印解码后的 b 会显示 §

import urllib
import urllib2
a='investments-%C2%A7-73g-legal.html'
b=urllib.unquote(a)

print (b.decode('utf8'))

urllib2.urlopen('http://localhost/' + b)

【讨论】:

  • 嗨,到目前为止,我尝试了您的解决方案,但我仍然收到异常 'ascii' codec can't encode character u'\xa7' in position 105: ordinal not in range(128)
  • 您在什么语句中得到该错误?你能发布引发异常的代码吗?
猜你喜欢
  • 2012-10-18
  • 2017-11-22
  • 1970-01-01
  • 2018-01-26
  • 2018-05-23
  • 2012-08-18
  • 2018-01-30
  • 2015-11-01
  • 2015-10-19
相关资源
最近更新 更多