Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python—以不同的编码读取各种文件_Python_Python 3.x_Utf 8_File Handling_Steganography - Fatal编程技术网

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,这是因为文件中存在空字符吗?不是,但这是一个单独问题的好材料。准备尽可能短的自足代码来重现问题,并在此处提出新问题。(如果我不得不猜测它与您正在使用的函数的填充有关。)