Я пытаюсь использовать сгенерированные URL, как этот http://www.viaf.org/viaf/search?query=cql.any+=+%22Jean-Claude%20Moissinac%22&maximumRecords=5&httpAccept=application/jsonкодирующая URL с питоном 3
, но при его использовании с
# -*- encoding: utf-8 -*-
import urllib.request
# successful trial with the URI
urlQuery = u'http://www.viaf.org/viaf/search?query=cql.any%20=%20"Bacache%20Maya"&httpAccept=application%2Fjson&maximumRecords=5'
print(urlQuery)
req = urllib.request.Request(urlQuery)
with urllib.request.urlopen(req) as rep:
print("success")
# attempt to build the URI; request fails
viafBaseUrl = u"http://www.viaf.org"
viafCommand = u"/viaf/search?"
viafSearchTemplate = u'"__name%20__surname"'
name = u"Bacache"
surname = u"Maya"
searchString = u'cql.any%20=%20' + viafSearchTemplate.replace(u"__surname", surname).replace(u"__name", name)
params = u"query="+searchString+u"&httpAccept=application%2Fjson&maximumRecords=5"
computedQuery = viafBaseUrl + viafCommand + params
print(urlQuery)
if computedQuery==urlQuery:
print("same strings")
req = urllib.request.Request(computedQuery)
with urllib.request.urlopen(req) as rep:
print("success")
Первый запрос является успешным, в то время как вторая ошибка с этой ошибкой:
UnicodeEncodeError: 'ascii' codec can't encode character '\ufeff' in position 76: ordinal not in range(128)
Я пробовал много способов обойти проблему без успеха. Использование urllib.parse.urlencode()
не работает, потому что оно изменяет некоторые символы, которые должны оставаться неповрежденными.
Результат печати на обоих URL идентичен, но строки разные, но я не понимаю, как получить одни и те же строки.
Читать эту post..http: //stackoverflow.com/a/17912811/6107715 –