您需要将 URL 从 unicode编码为字节串。u''
并r''
产生两种不同的物体;一个 unicode 字符串和一个字节串。
您可以使用该方法将 unicode 字符串编码为字节码.encode()
,但您需要知道要使用什么编码。通常,对于 URL,UTF-8 很好,但您也需要转义字节以适应 URL 方案:
import urlparse, urllib
parts = list(urlparse.urlsplit(url))
parts[2] = urllib.quote(parts[2].encode('utf8'))
url = urlparse.urlunsplit(parts)
上面的示例基于一个有根据的猜测,即您面临的问题是由于 URL 的路径部分中的非 ASCII 字符造成的,但是如果没有您提供更多详细信息,它必须保持猜测。
对于域名,您需要应用IDNA RFC3490 编码:
parts = list(urlparse.urlsplit(url))
parts[1] = parts[1].encode('idna')
parts = [p.encode('utf8') if isinstance(p, unicode) else p for p in parts]
url = urlparse.urlunsplit(parts)
有关更多信息,请参阅Python Unicode HOWTO。我还强烈建议您阅读Joel on Software Unicode 文章作为编码主题的良好入门。