如何将此变量保存到新文本文件?

时间:2015-09-15 19:20:03

标签: python

所以我试图将一些密文保存到用户命名的新文本文件中,但是当我运行代码时它会显示以下消息:

Please enter the name you wish the file to be called: cipher

Traceback (most recent call last):
  File "C:/Users/User/Documents/file figure.py", line 19, in <module>
    f.write(cipher_text_write)
  File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\x8e' in position 1: character maps to <undefined>

我设法弄清楚这是我要保存的实际消息导致问题。任何帮助将不胜感激!

这是我的代码:

cipher_text = " «²²µ ³¿ ´§³« ¯¹ µ´«²² "

filename = input("Please enter the name you wish the file to be called: ")
cipher_text_write = str(cipher_text)
cipher_filename = filename + ".txt"
f = open(cipher_filename,"w+")
f.write(cipher_text_write)
f.close()

1 个答案:

答案 0 :(得分:0)

这里要理解的重要一点是,加密的结果只是一个比特流。这些位不一定对应于合法字符串。

您的密码文本包含不能编码为任何合法字符的字节模式。有很多方法可以解决这个问题,但最简单的方法是将文件作为二进制文件打开,或者将这些位编码为base64,例如:

>>> import os
>>> import base64
>>> s = str(os.urandom(10000))
>>> encs=base64.b64encode(s)
>>> s2 = base64.b64decode(encs)
>>> cmp(s,s2)
0

当您想要读取密文时,需要根据您在写入文件时选择的解决方案,将包含密文的文件作为二进制文件打开或读取并解码位的base64表示。< / p>