解码函数给出的错误不会通过编码来修复

Decoding function gives error that will not be fixed by encoding it

我的代码加密一个文件,第二部分将解密它。它适用于 txt 文件,但如果我将 .docx 放入其中,它会抛出一个我不知道如何解决的错误。以下是我需要帮助的代码的主要部分。

我已经使用本网站的示例对其进行了编码和解码,但它不起作用,它只是给出了同样的错误。

dwdfa = input('Enter the entire file directory plus extension you wish to decrypt:')
dodf = open(dwdfa,"r+").read()
a = len(dodf)
dfirst = dodf[a-2]+dodf[a-1]+dodf[:a-2]
for i in dfirst:
    dsecond = (chr(ord(i) - 5))
    Word.append(dsecond)
    dsecond = ''.join(Word)
print(dsecond)
new = open(dwdfa + "1", "w")
new.write(dsecond)

我希望输出能给我文本的解码版本并打印出来,但是它只给出相同的加密文本和错误:

UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 18: character maps to

如果可能,请尝试简化答案,因为我不了解字节到字符串的转换或其他类似内容。 r+ 是用来打开文件的,如果需要,我会添加加密位。

docx是二进制格式(准确的说是一个包含XML个文件的zip压缩包),因此需要处理成bytes而不是[=26中的string =].

如果你想简单地加密任意文件(例如图像、可执行文件),你将需要重写函数以处理字节而不是字符(例如,-5 caesar shift (chr(ord(i) - 5)) 将是(i - 5 + 256) % 256,并将 b 添加到 open() 调用的标志中。文本文件将仍然是文本文件,除非它们包含 Unicode(这将被破坏)。加密的 docx 文件将是乱码, 因此在解密之前无法在 Word 中打开它们。

但是如果您想处理 docx 文件的 text,您将需要一个特殊的 docx 库(例如 https://python-docx.readthedocs.io/en/latest/)。请注意,进行处理 in-place(保留格式和布局不变)可能并非易事。