python—以不同的编码读取各种文件
我构建了一个在图像中隐藏python—以不同的编码读取各种文件,python,python-3.x,utf-8,file-handling,steganography,Python,Python 3.x,Utf 8,File Handling,Steganography,我构建了一个在图像中隐藏UTF-8文本的工具,它可以很好地工作。我想知道我是否可以在图像中编码完整的文件。为此,程序需要读取所有类型的文件。问题在于并非所有文件都使用UTF-8编码,因此,您必须使用以下代码读取它们: file = open('somefile.docx', encoding='utf-8', errors='surrogateescape') 如果你把它复制到一个新的文件中并读取它们,它就会说这些文件是不可破译的。我需要一种方法来读取所有类型的文件,然后编写它们,这样它们仍然
UTF-8
文本的工具,它可以很好地工作。我想知道我是否可以在图像中编码完整的文件。为此,程序需要读取所有类型的文件。问题在于并非所有文件都使用UTF-8
编码,因此,您必须使用以下代码读取它们:
file = open('somefile.docx', encoding='utf-8', errors='surrogateescape')
如果你把它复制到一个新的文件中并读取它们,它就会说这些文件是不可破译的。我需要一种方法来读取所有类型的文件,然后编写它们,这样它们仍然可以工作。在Python3中有这样做的方法吗
谢谢。改变你的看法。您不会“在图像中隐藏UTF-8文本”。在图像中隐藏字节 这些字节可能完全是意外地解释为UTF-8编码的文本。但事实上,它们可以是任何东西 使用
open(“…”,encoding=“…”)
以文本形式读取文件的隐藏步骤是将文件的字节解码为字符串。当您希望在程序中将文件内容视为字符串时,这非常方便
跳过那个隐藏的解码步骤,以字节的形式读取文件:
open(“…”,“rb”)
以二进制而不是文本的形式读取文件。Python3有一个编解码器包,用于类似的内容。看看。@Daniel谢谢你的主意。但是如何在图像中隐藏字节
对象呢。它不完全是字符串,将其转换为字符串也不起作用,encode
函数对其不起作用。如何继续?由于某种原因,您链接到的代码需要一个字符串消息
。这真的没有任何意义(它立即调用str2bin(message)
是有原因的)。把它当作练习3,重写它,这样它从一开始就需要一个字节的消息。(提示:这主要包括抛出不必要的代码。)@Tomalak我这样做了。我编辑了str2bin函数def str2bin(message):如果类型(message)是str:message=message.encode('utf-8')binary=bin(int.from_bytes(message,'big'))返回binary[2://code>来解决这个问题。我有一个问题。如何将字节
对象转换为要隐藏的整数?准确地使用int.from_bytes
函数int.from_bytes()
需要字节作为输入<编码>“someString”。编码(“UTF-8”)
将字符串转换为字节。这比您实际需要的步骤多了一步。我将使它成为一个仅限字节的函数。非常感谢。该代码适用于.txt和.py等简单文件,但当我尝试将其用于.pdf和.docx时,它表明该文件已损坏。你能告诉我为什么吗?我将文件打开为file=open(self.docname,mode='rb')funcs.hide(self.filepath,file.read(),bits)
。文件大小也从40KB减少到3KB,这是因为文件中存在空字符吗?不是,但这是一个单独问题的好材料。准备尽可能短的自足代码来重现问题,并在此处提出新问题。(如果我不得不猜测它与您正在使用的函数的填充有关。)