当使用带有以下字符串的unicode函数时,它会出错:
unicode('All but Buitoni are using Pinterest buffers and Pratt & Lamber haven’t used it for a month so I’ll check on this.')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 68: ordinal not in range(128)
当我检查位置68时,它似乎是叛逆者'
:
>>> str='All but Buitoni are using Pinterest buffers and Pratt & Lamber haven’t used it for a month so I’ll check on this.'
>>> str[62:75]
' haven\xe2\x80\x99t us'
有没有办法解决这个问题。我在第426行的models.py文件中的gspread包装器中发现了这个错误。这是一行:
425 cell_elem = feed.find(_ns1('cell'))
426 cell_elem.set('inputValue', unicode(val))
427 uri = self._get_link('edit', feed).get('href')
因此,一旦我尝试使用值更新一个单元格,在这种情况下使用字符串,gspread包装器会尝试将其转换为unicode,但由于使用了瑕疵而无法执行此操作。可能,这是一个错误。如何处理这个问题?谢谢你的帮助。
答案 0 :(得分:0)
无需替换角色。只需将编码的字符串正确解码为unicode:
>>> s = 'All but Buitoni are using Pinterest buffers and Pratt & Lamber haven’t used it for a month so I’ll check on this.'
>>> s.decode('utf-8')
u'All but Buitoni are using Pinterest buffers and Pratt & Lamber haven\u2019t used it for a month so I\u2019ll check on this.' # unicode object
你需要告诉python你的str
对象使用什么编码才能将其转换为unicode,而不是直接使用unicode(some_str)
。在这种情况下,您的字符串使用UTF-8
进行编码。使用此方法将比尝试替换字符更好地扩展,因为对于DB中存在的每个unicode字符,您不需要特殊情况。
IMO,在Python中处理unicode的最佳做法是:
unicode
个对象。我还建议您查看this slide deck,它可以很好地概述如何在Python中处理unicode。