Ошибка Юникода при попытке вызова API поиска Google - PullRequest
0 голосов
/ 24 января 2011

Мне нужно выполнить поиск в Google, чтобы получить количество результатов по запросу.Я нашел ответ здесь - Поиск Google из приложения Python

Тем не менее, для нескольких запросов я получаю сообщение об ошибке ниже.Я думаю, что запрос содержит символы Unicode.

UnicodeDecodeError: кодек «ascii» не может декодировать байт 0xc3 в позиции 28: порядковый номер не в диапазоне (128)

Я искал в Google и нашел, что мне нужнопреобразовать юникод в ascii и найти приведенный ниже код.

def convertToAscii(text, action):
            temp = unicode(text, "utf-8")
            fixed = unicodedata.normalize('NFKD', temp).encode('ASCII', action)
            return fixed
    except Exception, errorInfo:
            print errorInfo
            print "Unable to convert the Unicode characters to xml character entities"
            raise errorInfo

Если я использую действие игнорировать, оно удаляет эти символы, но если я использую другие действия, я получаю исключения.

Любая идея, как справиться с этим?

Спасибо

== Редактировать == Я использую приведенный ниже код для кодирования, а затем выполнить поиск, и это вызывает ошибку.

query = urllib.urlencode ({'q': searchfor})

Ответы [ 2 ]

2 голосов
/ 24 января 2011

Вы не можете urlencode необработанные строки Unicode. Вам необходимо сначала закодировать их в UTF-8, а затем передать в него:

query = urllib.urlencode({'q': u"München".encode('UTF-8')})

Возвращает q=M%C3%BCnchen, что Google с радостью принимает.

0 голосов
/ 24 января 2011

Вы не можете безопасно конвертировать Unicode в ASCII.Для этого необходимо выбросить информацию (в частности, выбросить неанглийские буквы).

Вы должны выполнять весь процесс в Unicode, чтобы не потерять какую-либо информацию.

...