试图在我的一个Python脚本文件中存储原始字节

试图在我的一个Python脚本文件中存储原始字节,python,Python,我目前正在编写一个Python脚本,该脚本将能够将所有二进制文件隐藏在自身内部。它通过读取目标文件中的所有二进制数据,然后将其存储在自身内部的列表中来实现这一点。然后删除文件以隐藏它 我的问题是: 当我在脚本文件中存储读取的字节时,Python抱怨它不是UTF-8代码。 以下是我读取的原始数据的一个小示例: ßëM€€Ê yQtm×ßü«WTª¼É[–±Ê 如何在不破坏脚本的情况下存储这些字节?我想我可以将每个字节存储为 而是代码点,以便解释器接受它。但是如何告诉write()-I/O函数将字

我目前正在编写一个Python脚本,该脚本将能够将所有二进制文件隐藏在自身内部。它通过读取目标文件中的所有二进制数据,然后将其存储在自身内部的列表中来实现这一点。然后删除文件以隐藏它

我的问题是: 当我在脚本文件中存储读取的字节时,Python抱怨它不是UTF-8代码。 以下是我读取的原始数据的一个小示例:

ßëM€€Ê yQtm×ßü«WTª¼É[–±Ê
如何在不破坏脚本的情况下存储这些字节?我想我可以将每个字节存储为
而是代码点,以便解释器接受它。但是如何告诉write()-I/O函数将字节作为代码点写入?

您应该对二进制文件进行编码(例如,使用base64加密),以将字节转换为“合法字符”。然后,当您需要二进制信息时,将其转换回来

有关一些代码示例,请参见示例

一个简单的示例可以帮助您继续:

# assume your bytes came from a file:
bytesIneed = bytearray([234,232,231,188,122,132,145])
import base64

bytesConverted = base64.b64encode(bytesIneed)

print "encoded string: "
print bytesConverted

bytesRecovered = base64.b64decode(bytesConverted)

print "decoded binary: "
for c in bytesRecovered: print(ord(c))
这将返回以下输出:

encoded string:
6ujnvHqEkQ==
decoded binary:
234
232
231
188
122
132
145

如您所见,字符串
6ujnvHqEkQ==
可以存储在任何地方;解码功能将其转换回所需的二进制数据。

您应该对二进制数据进行编码,例如,使用base64加密,将字节转换为“合法字符”。然后,当您需要二进制信息时,将其转换回来

有关一些代码示例,请参见示例

一个简单的示例可以帮助您继续:

# assume your bytes came from a file:
bytesIneed = bytearray([234,232,231,188,122,132,145])
import base64

bytesConverted = base64.b64encode(bytesIneed)

print "encoded string: "
print bytesConverted

bytesRecovered = base64.b64decode(bytesConverted)

print "decoded binary: "
for c in bytesRecovered: print(ord(c))
这将返回以下输出:

encoded string:
6ujnvHqEkQ==
decoded binary:
234
232
231
188
122
132
145

如您所见,字符串
6ujnvHqEkQ==
可以存储在任何地方;解码功能将其转换回所需的二进制数据。

有趣的是,用例到底是什么?删除文件后,脚本无法正常运行-脚本无法再次运行,对吗?(除非它可以被重新生成,但这有什么意义…)这大概是Python 3?您是如何将字节存储为字符串列表的?您所说的“在其内部的列表中”是什么意思?您也在查看原始数据,就好像它以某种编码表示文本一样;假设您正在使用终端或Windows控制台打印二进制数据,这意味着通过某种编解码器将其解释为文本?删除文件后,脚本无法正常运行-脚本无法再次运行,对吗?(除非它可以被重新生成,但这有什么意义…)这大概是Python 3?您是如何将字节存储为字符串列表的?您所说的“在其内部的列表中”是什么意思?您也在查看原始数据,就好像它以某种编码表示文本一样;假设您正在使用终端或Windows控制台打印二进制数据,这意味着通过某种编解码器将其解释为文本。多亏了您的帮助,它现在可以正常工作了。我已经在.mp3、.mp4、.jpg和.txt上对它进行了测试,它运行正常!我可以隐藏、显示和重新创建文件!:)仅使用
bytearray
也可以。我不认为这里需要base64?问题是(根据我对这个问题的理解)OP希望数据以字符形式存储在代码中。当然,在我的示例的第一行中,每个字节可以使用五个字符,但是存储base64字符串更紧凑。根据OP留下的评论,现在可以“隐藏和显示”文件,这正是它的目的。多亏了你的帮助,它现在可以工作了。我已经在.mp3、.mp4、.jpg和.txt上对它进行了测试,它运行正常!我可以隐藏、显示和重新创建文件!:)仅使用
bytearray
也可以。我不认为这里需要base64?问题是(根据我对这个问题的理解)OP希望数据以字符形式存储在代码中。当然,在我的示例的第一行中,每个字节可以使用五个字符,但是存储base64字符串更紧凑。根据OP留下的评论,现在可以“隐藏和显示”文件,这正是其目的。