从文件中解码的Python Unicode字节

时间:2016-03-11 02:47:03

标签: python encryption unicode

我觉得自己是发帖的绝对白痴......

因此,我制作了一个文件套管,它读取文本文件,将其输出到加密文件,然后允许您将该文件转换回纯文本。我已经把文件写下来了,但是阅读它是个问题。

来自加密:

newf.write(bytes(result[0], "utf-8"))
newf.write(bytes('{[:|:;:|:]}'))
newf.write(bytes(result[1], "utf-8"))
newf.close()

还有解密:

name = fudder.askopenfilename(defaultextension =("Text Files","*.txt"),title = "Choose a file to decrypt.")
    with open(name,'rb') as Usefile:
        filecont = bytes(Usefile.read(),'utf-8')

它会出现此错误:

File "C:\STUFF\FILE.py", line 93, in <lambda>
    self.fileO = Button(text = 'Decrypt File', command = lambda: cryptFile())
  File "C:\STUFF\FILE.py", line 60, in cryptFile
    filecont = Usefile.read()
  File "C:\Program Files (x86)\Python35-32\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 68: character maps to <undefined>

1 个答案:

答案 0 :(得分:0)

回溯显示,在 真实 代码中,错误发生在此行的cryptFile函数中:

    filecont = UseFile.read()

UnicodeDecodeError表示UseFile是一个类似文件的对象,可能在文本模式下打开而未指定编码。这意味着它将尝试使用cp1252的默认编码(在Windows上)来解码实际编码为UTF-8的文件。显然,当编解码器遇到任何未映射的字节(例如0x81)时,这将失败。

解决方案是在打开文件时指定正确的编码:

    with open(name, 'rt', encoding='utf-8') as Usefile:
        filecont = UseFile.read()

这将导致filecont成为unicode字符串对象。