我已经阅读了许多关于Python编码和相关内容的文章,也许还不够,但我已经在这上面工作了两天,仍然没有结果。我会尽力讲清楚问题。主要问题是我正在尝试去除所有的重音和字符,如#、!、%、& ...
问题是,我使用以下调用对Twitter搜索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()
函数,它评估推文的文本。以下几行代码存在问题:
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
在这里,分裂并不重要。重要的是,如果我在这个最后的方法中打印变量texto
的类型,我可能会得到str或unicode作为答案。如果文本中有任何重音,它就会像unicode一样出现。所以,当应用程序接收到最多100条推文时,我会得到以下错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 17: ordinal not in range(128)
对于以下文本:
Text: 现在问题出现在速度上了。 类型:“unicode”
有任何想法吗?