Итак, я много читал о кодировке Python и прочем - возможно, недостаточно, но я работал над этим 2 дня и все еще ничего - но у меня все еще проблемы.Я постараюсь быть максимально ясным.Главное, что я пытаюсь удалить все акценты и символы, такие как #,!,%, & ...
Дело в том, что я выполняю поиск запросов в Twitter Search API с помощью этого вызова:
query = urllib2.urlopen(settings.SEARCH_URL + '?%s' % params)
Затем я вызываю метод (avaliar_pesquisa()
) для оценки полученных результатов на основе тегов (или терминов) ввода:
dados = avaliar_pesquisa(simplejson.loads(query.read()), str(tags))
На avaliar_pesquisa()
происходит следующее:
def avaliar_pesquisa(dados, tags):
resultados = []
# Percorre os resultados
for i in dados['results']
resultados.append({'texto' : i['text'],
'imagem' : i['profile_image_url'],
'classificacao' : avaliar_texto(i['text'], tags),
'timestamp' : i['created_at'],
})
Обратите внимание на avaliar_texto()
, который оценивает текст Tweet.И есть проблема именно в следующих строках:
def avaliar_texto(texto, tags):
# Remove accents
from unicodedata import normalize
def strip_accents(txt):
return normalize('NFKD', txt.decode('utf-8'))
# Split
texto_split = strip_accents(texto)
texto_split = texto.lower().split()
# Remove non-alpha characters
import re
pattern = re.compile('[\W_]+')
texto_aux = []
for i in texto_split:
texto_aux.append(pattern.sub('', i))
texto_split = texto_aux
Разделение здесь не имеет значения.Дело в том, что если я напишу тип var texto
в этом последнем методе, я могу получить str или unicode в качестве ответа.Если на тексте есть какой-либо акцент, он выглядит как юникод.Итак, я получаю эту ошибку при запуске приложения, которое получает максимум 100 твитов в качестве ответа:
UnicodeEncodeError: кодек «ascii» не может кодировать символ u «\ xe9» в позиции 17: порядковый номер не находится в диапазоне(128)
Для следующего текста:
Текст: Агора или проблема, скорее быстрая.введите 'unicode'
Есть идеи?