Python编码问题
所以,我已经读了很多关于Python编码和其他东西的书——可能还不够,但我已经为此工作了2天,但仍然一无所获——但我仍然遇到了麻烦。我会尽量说清楚的。主要的是,我正在尝试删除所有的重音和字符,如#、!、%、& 问题是,我使用以下调用在Twitter搜索API上执行查询搜索: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())来根据输入的标记(或术语)评估我得到的
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
分裂在这里并不重要。
问题是,如果我在最后一个方法中打印vartexto
的类型,我可能会得到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。非常感谢你!将您的解决方案与上面接受的解决方案混合。非常感谢你!我认为这只会影响程序文本本身的解释,而不会影响来自外部源的任何数据。我有一个类似的问题,罗马尼亚字符,我得到了解决,把它放在顶部。