Python编码问题

Python编码问题,python,django,encoding,twitter,utf-8,Python,Django,Encoding,Twitter,Utf 8,所以,我已经读了很多关于Python编码和其他东西的书——可能还不够,但我已经为此工作了2天,但仍然一无所获——但我仍然遇到了麻烦。我会尽量说清楚的。主要的是,我正在尝试删除所有的重音和字符,如#、!、%、& 问题是,我使用以下调用在Twitter搜索API上执行查询搜索: query = urllib2.urlopen(settings.SEARCH_URL + '?%s' % params) 然后,我调用一个方法(avaliar_pesquisa())来根据输入的标记(或术语)评估我得到的

所以,我已经读了很多关于Python编码和其他东西的书——可能还不够,但我已经为此工作了2天,但仍然一无所获——但我仍然遇到了麻烦。我会尽量说清楚的。主要的是,我正在尝试删除所有的重音和字符,如#、!、%、&

问题是,我使用以下调用在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
分裂在这里并不重要。 问题是,如果我在最后一个方法中打印var
texto
的类型,我可能会得到str或unicode作为答案。如果文本上有任何重音,它就像unicode。 因此,我在运行最多接收100条tweets作为答案的应用程序时遇到此错误:

UnicodeEncodeError:“ascii”编解码器无法在中对字符u'\xe9'进行编码 位置17:序号不在范围内(128)

以下案文:

课文:阿格拉·奥·问题·奥·斯皮蒂。 键入“unicode”


有什么想法吗?

这是我在代码中用来丢弃重音等的东西

text = unicodedata.normalize('NFD', text).encode('ascii','ignore')

decode()
方法将应用于str对象,而不是unicode对象。给定一个unicode字符串作为输入,它首先尝试使用ascii编解码器将其编码为str,然后解码为utf-8,但失败了

尝试
返回normalize('NFKD',unicode(txt))

Ty放置:

# -*- coding: utf-8 -*-

在包含代码的python脚本的开头。

触发该错误消息的确切行是哪一行?你有回溯吗?UnicodeEncodeError发生在代码的哪一行?@Jong准确的一行在normalize函数上。为此,我得到:TypeError:必须是unicode,而不是str。因此,正如下面建议的,我在de
normalize()函数中添加了
unicode(text)
cast。非常感谢你!将您的解决方案与上面接受的解决方案混合。非常感谢你!我认为这只会影响程序文本本身的解释,而不会影响来自外部源的任何数据。我有一个类似的问题,罗马尼亚字符,我得到了解决,把它放在顶部。