gpt4 book ai didi

python - 编码给出 "' ascii' 编解码器无法编码字符......序号不在范围内(128)“

转载 作者:太空狗 更新时间:2023-10-29 17:17:48 24 4
gpt4 key购买 nike

我正在研究 Django RSS 阅读器项目 here .

RSS 提要将显示类似“俄克拉荷马城 (美联社) — 詹姆斯·哈登让”的内容。 RSS 提要的编码读取 encoding="UTF-8"所以我相信我在下面的代码片段中将 utf-8 传递给 markdown。破折号是它窒息的地方。

我收到 Django 错误“'ascii' 编解码器无法编码位置 109 中的字符 u'\u2014':序号不在范围 (128) 内”,这是一个 UnicodeEncodeError。在传递的变量中,我看到“OKLAHOMA CITY (AP)\u2014 James Harden”。不起作用的代码行是:

content = content.encode(parsed_feed.encoding, "xmlcharrefreplace")

我正在使用 markdown 2.0、django 1.1 和 python 2.4。

要完成这项工作,我需要执行哪些神奇的编码和解码顺序?


(响应普罗米修斯的请求。我同意格式化有帮助)

因此在 View 中,我在 parsed_feed 编码行上方添加了 smart_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:序号不在范围 (128)” 因为现在它读取“\xe2\x80\x94”,其中破折号是

最佳答案

如果您收到的数据实际上是用 UTF-8 编码的,那么它应该是一个字节序列——在 Python 2.X 中是一个 Python 的“str”对象

你可以用断言来验证这一点:

assert isinstance(content, str)

一旦您知道这是真的,您就可以转向实际的编码。 Python 不进行代码转换——例如,直接从 UTF-8 到 ASCII。您需要首先通过解码将字节序列转换为 Unicode 字符串:

unicode_content = content.decode('utf-8')

(如果您可以信任 parsed_feed.encoding,则使用它代替文字“utf-8”。无论哪种方式,都要为错误做好准备。)

然后您可以获取该字符串,并将其编码为 ASCII,将高位字符替换为其 XML 实体等效项:

xml_content = unicode_content.encode('ascii', 'xmlcharrefreplace')

完整的方法看起来像这样:

try:
content = content.decode(parsed_feed.encoding).encode('ascii', 'xmlcharrefreplace')
except UnicodeDecodeError:
# Couldn't decode the incoming string -- possibly not encoded in utf-8
# Do something here to report the error

关于python - 编码给出 "' ascii' 编解码器无法编码字符......序号不在范围内(128)“,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2513027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com