首页 > 解决方案 > 如何将错误保存的字节对象转换回字节?(蟒蛇/django)

问题描述

我已经下载了一些带有请求的网页,并使用 Django 的 ORM 将内容保存在 postgres 数据库中[在文本字段中]。对于正在发生的事情的一些 sudocode,请看这里:

art = Article()
page = requests.get("http://example.com")
art.raw_html = page.content
art.save()

我验证了 page.content 是一个字节对象,我想我假设这个对象会在保存时自动解码,但它似乎不是......它已被转换为字节对象的一些奇怪的字符串表示,表面上是由 Django 编写的。当我调用 art.raw_html 时,它在解释器中看起来像这样:

'b\'<!DOCTYPE html>\\n<html lang="en" class="pb-page"

如果我用 print 调用它,我会得到:

b'<!DOCTYPE html>\n<html lang="en" class="pb-page"

而且对于我的生活,我无法将它重新编码为字节对象,即使我修剪掉前导 b' 和尾随 '。

我觉得有一个简单的解决方案,我觉得自己像个白痴......但经过大量的实验和谷歌搜索,我没有弄清楚。

顺便说一句,如果我手动复制从 print 语句返回的内容(例如使用光标),我可以将剪贴板内容转换回字节对象,然后将其解码为一些可读格式的 html。

显然有更好的方法。(是的,今后我将首先停止保存这样的内容。)

标签: pythondjangopython-unicode

解决方案


您可以使用 eval 或 ast.literal_eval 如下。

data = "b'gAAAAABc1arg48DmsOwQEbeiuh-FQoNSRnCOk9OvXXOE2cbBe2A46gmP6SPyymDft1yp5HsoHEzXe0KljbsdwTgPG5jCyhMmaA=='"

eval(data)
b'gAAAAABc1arg48DmsOwQEbeiuh-FQoNSRnCOk9OvXXOE2cbBe2A46gmP6SPyymDft1yp5HsoHEzXe0KljbsdwTgPG5jCyhMmaA=='

使用 ast.literal_eval

import ast
ast.literal_eval(data)  

感谢@juanpa.arrivillaga。我只是补充回答。


推荐阅读