Mit python ist das urllib.quote_plus auf utf-8-strings mit 'sicher' Argumente

Ich habe ein unicode-string im python-code:

name = u'Mayte_Martín'

Ich würde gerne verwenden Sie es mit einer SPARQL-Abfrage, was bedeutete, dass ich encode die Zeichenkette mit 'utf-8', und verwenden Sie das urllib.quote_plus oder Anfragen.Zitat auf. Jedoch, diese beiden Zitat-Funktionen Verhalten sich seltsam, wie gesehen werden kann, wenn verwendet, mit und ohne die 'safe' - Argumente.

from urllib import quote_plus

Ohne 'safe' - argument:

quote_plus(name.encode('utf-8'))
Output: 'Mayte_Mart%C3%ADn'

Mit 'safe' - argument:

quote_plus(name.encode('utf-8'), safe=':/')
Output: 
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-164-556248391ee1> in <module>()
----> 1 quote_plus(v, safe=':/')

/usr/lib/python2.7/urllib.pyc in quote_plus(s, safe)
   1273         s = quote(s, safe + ' ')
   1274         return s.replace(' ', '+')
-> 1275     return quote(s, safe)
   1276 
   1277 def urlencode(query, doseq=0):

/usr/lib/python2.7/urllib.pyc in quote(s, safe)
   1264         safe = always_safe + safe
   1265         _safe_quoters[cachekey] = (quoter, safe)
-> 1266     if not s.rstrip(safe):
   1267         return s
   1268     return ''.join(map(quoter, s))

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 10: ordinal not in range(128)

Scheint das problem zu sein, mit rstrip-Funktion. Ich habe versucht, einige änderungen vorzunehmen und nennen als...

quote_plus(name.encode('utf-8'), safe=u':/'.encode('utf-8'))

Aber nicht, das Problem zu lösen. Was könnte hier das Problem?

Ich versuche nur den code mit python 2.7.4 & ipython 1.1.0 mit überhaupt keine Probleme.
Mit der 'sicheren' argument? Ich habe python v2.7.3 und ipython v1.2.1
Wie Sie bereits erwähnt, es funktioniert für Sie, ich gerade erstellt ein weiteres Umwelt sauber und versuchte es. Es funktioniert! Es muss also eine Interferenz von einigen anderen Modul/Tätigkeit in meinem Arbeitsbereich. Ich werde versuchen, herauszufinden, was es ist und poste es hier.
Es ist verwirrend. Ich neugestartet mein ipython notebook kernel und ich war nicht in der Lage, es jetzt zu reproduzieren.
es ist ein bug hier: bugs.python.org/issue23885 es scheint python-dev-team wäre nicht zu beheben

InformationsquelleAutor gopalkoduri | 2014-03-14

Schreibe einen Kommentar