¿Cómo tratar con ® en url para urllib2.urlopen?

Recibí una url: https://www.packtpub.com/virtualization-and-cloud/citrix-xenapp®-75-desktop-virtualization-solutions ; Es de BeautifulSoup.

url=u'https://www.packtpub.com/virtualization-and-cloud/citrix-xenapp\xae-75-desktop-virtualization-solutions' 

Quiero alimentar de nuevo en urllib2.urlopen de nuevo.

 import urllib2 source = urllib2.urlopen(url).read() 

El error que recibo:

 UnicodeEncodeError: 'gbk' codec can't encode character u'\xae' in position 43: illegal multibyte sequence 

Por lo tanto, he intentado:

 source = urllib2.urlopen(url.encode("utf-8")).read() 

Obtuvo la fuente de la página, sin embargo, es diferente de la URL original.

 originalUrl = 'https://www.packtpub.com/virtualization-and-cloud/citrix-xenapp®-75-desktop-virtualization-solutions' originalSource = urllib2.urlopen(originalUrl).read() originalSource == source 

El resultado es falso. ¿Hay alguna idea para arreglar esta url? ¿Cómo convertir u ‘\ xae’ en original ® ?

Las URL deben ser válidas mediante una combinación de puntos, con puntos de código no ASCII codificados correctamente. Deberá codificar en UTF-8, luego url citar la ruta de su URL:

 import urllib import urllib2 import urlparse originalUrl = u'https://www.packtpub.com/virtualization-and-cloud/citrix-xenapp\xae-75-desktop-virtualization-solutions' parsed_link = urlparse.urlsplit(originalUrl.encode('utf8')) parsed_link = parsed_link._replace(path=urllib.quote(parsed_link.path)) encoded_link = parsed_link.geturl() source = urllib2.urlopen(encoded_link).read() 

Manifestación:

 >>> import urllib >>> import urllib2 >>> import urlparse >>> originalUrl = u'https://www.packtpub.com/virtualization-and-cloud/citrix-xenapp\xae-75-desktop-virtualization-solutions' >>> parsed_link = urlparse.urlsplit(originalUrl.encode('utf8')) >>> parsed_link = parsed_link._replace(path=urllib.quote(parsed_link.path)) >>> encoded_link = parsed_link.geturl() >>> encoded_link 'https://www.packtpub.com/virtualization-and-cloud/citrix-xenapp%C2%AE-75-desktop-virtualization-solutions' >>> source = urllib2.urlopen(encoded_link).read() >>> len(source) 68758