我试图通过编码来掩盖字符串:
>>> 'monkey'.encode('utf-16')
b'\xff\xfem\x00o\x00n\x00k\x00e\x00y\x00'
然后我复制\xff\xfem\x00o\x00n\x00k\x00e\x00y\x00
并将其粘贴到文件file.txt。
然后我想读取该文件并对其进行解码。
>>> with open('file.txt', 'rb') as f:
>>> bytes_object = next(f).strip() # assume file has only one line
>>> bytes_object
b'\\xff\\xfem\\x00o\\x00n\\x00k\\x00e\\x00y\\x00'
正在逃脱......而不是我想要的。
解码无法按预期工作。
>>> bytes_object.decode('utf-16')
'硜晦硜敦屭へ漰硜〰屮へ欰硜〰履へ礰硜〰'
显然,我不明白这里的意思。有没有办法读取和解码具有文本\xff\xfem\x00o\x00n\x00k\x00e\x00y\x00
的文件?
答案 0 :(得分:2)
复制和粘贴bytes对象的表示不是一件有用的事情。如果要创建UTF-16文件,请尝试以下操作:
with open('file.txt', 'wb') as fp:
message = 'monkey'.encode('UTF16')
fp.write(message)
答案 1 :(得分:1)
其他答案是准确的,因为将字节本身写入文件比复制和粘贴repr()表单(使用反斜杠-x)更简单。
但是你的问题是关于如何解析该表单,并且可以使用eval(),这基本上与repr()相反。这是一个交互式版本,它不使用文件写入/读取,而是执行相关操作。
>>> s = 'monkey'
>>> e = s.encode('utf-16')
>>> x = str(e)
>>> x
"b'\\xff\\xfem\\x00o\\x00n\\x00k\\x00e\\x00y\\x00'"
>>> eval(x)
b'\xff\xfem\x00o\x00n\x00k\x00e\x00y\x00'
>>> eval(x).decode('utf-16')
'monkey'