如何将错误保存的字节对象转换回字节? (python / django)

时间:2018-07-24 03:17:53

标签: python django python-unicode

我已经下载了一些带有请求的网页,并使用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语句返回的内容(例如使用光标),则可以将剪贴板的内容完全转换回byte对象,然后将其解码为一些可读格式的html。

显然,有更好的方法。 (是的,今后我将一开始停止保存此类内容。)

1 个答案:

答案 0 :(得分:1)

您可以按以下方式使用eval或ast.literal_eval。

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

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

使用ast.literal_eval

import ast
ast.literal_eval(data)  

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