我正在完成Django RSS阅读器项目here。
RSS提要将读到类似“俄克拉何马城(美联社)-詹姆斯哈登让”。RSS提要的编码读取encoding=“UTF-8”,因此我相信我正在传递UTF-8以在下面的代码片段中标记。紧急冲刺是它窒息的地方。
我得到一个Django错误“'ascii'编解码器无法对位置109中的字符u'\u2014'进行编码:序号不在范围(128)”这是UnicodeEncodeError。在传递的变量中,我看到了“俄克拉何马城(俄克拉何马州)詹姆斯哈登”。无法工作的代码行是:
content = content.encode(parsed_feed.encoding, "xmlcharrefreplace")
我正在使用Markdow2.0、Django1.1和Python2.4。
我需要做的编码和解码的神奇顺序是什么?
(回应普罗米修斯的请求。我同意格式的帮助)
所以在视图中,我在解析的feed编码行上方添加了一个智能的unicode行。。。
content = smart_unicode(content, encoding='utf-8', strings_only=False, errors='strict')
content = content = content.encode(parsed_feed.encoding, "xmlcharrefreplace")
这就把问题推到了我的models.py上
def save(self, force_insert=False, force_update=False):
if self.excerpt:
self.excerpt_html = markdown(self.excerpt)
# super save after this
如果我把保存方法改成。。。
def save(self, force_insert=False, force_update=False):
if self.excerpt:
encoded_excerpt_html = (self.excerpt).encode('utf-8')
self.excerpt_html = markdown(encoded_excerpt_html)
我得到一个错误“'ascii'编解码器无法解码位置141中的字节0xe2:ordinal not in range(128)”,因为现在它在em破折号所在的位置读取“\xe2\x80\x94”
Django provides a couple of useful functions for converting back and forth between Unicode and bytestrings:
我在使用zip文件写入文件名时遇到此错误。以下操作失败
接下来的工作
如果您接收的数据实际上是用UTF-8编码的,那么它应该是一个字节序列——Python 2.X中的Python“str”对象
您可以使用断言来验证这一点:
一旦你知道这是真的,你可以移动到实际的编码。Python不做代码转换——例如,直接从UTF-8转换到ASCII。首先需要将字节序列解码为Unicode字符串:
(如果您可以信任解析的feed.encoding,那么使用它而不是文本“utf-8”。不管怎样,都要为错误做好准备。)
然后,您可以获取该字符串,并将其编码为ASCII,用它们的XML实体等价物替换高位字符:
那么,完整的方法应该是这样的:
相关问题 更多 >
编程相关推荐