我要读取和编辑一个名为“ settings.dat”的文件。通过记事本打开该文件时,得到的编码不可读。
我认为这可能是二进制文件。据我所知,编码可能是UTF-16。这是我尝试转换的方式:
with open('settings.dat', 'rb') as binary_file:
raw_data = binary_file.read()
str_data = raw_data.decode('utf-16', 'ignore')
print(str_data)
输出仍然是不可读的形式,带有看起来像中文的字符。这不是一个简单的字节到字符串转换问题吗?输出如下:
䕗䙃h 3 Ԁ ː ᙫ ␐☐ᜐ┐Ⱀ⨐ᴐሐ⼐【ㄐ㈐䠐倐䬐䴐ᄐἐḐ‐점퀐쬐촐
答案 0 :(得分:1)
.dat文件是通用文件,并且 可以是二进制文件也可以是文本文件。通常会访问这些文件并将其仅用于应用程序支持,并且每个应用程序对.dat文件的处理方式都不同。因此,与.gif或.docx文件不同,.dat文件没有遵循会影响所有.dat文件的特定协议。
如果您想了解.dat文件如何工作并转换为人类可读的格式,则需要事先了解应用程序如何处理这些文件。
对于汉字,您尝试使用UTF-16格式解码二进制.dat文件。那不会改变文件的内容。您只是将bbbb bbbb bbbb bbbb = xxxx
的重复序列的字节序列进行分组,其中b
是字节,x
是十六进制数字。
许多Unicode字符是中文[在技术上,它们被称为表意文字或表意文字],而另一些则未使用,即保留。
答案 1 :(得分:0)
如果它是二进制文件,那么为什么要查看它?除非您事先知道settings.dat包含人类可读的字符,否则尝试“查找”编码以使输出为人类可读的字符是没有意义的,因为您不会成功。
另一方面,如果您做知道settings.dat包含人类可读的字符,那么utf-16可能是错误的编码。
答案 2 :(得分:0)
这不是python的答案,但是strings
命令行工具在逆向工程数据格式中通常是无价之宝,可让您轻松浏览二进制文件以查找熟悉的明文模式。显然,如果使用某种加密/压缩方式(例如常用的gzip),将无济于事,并且需要先进行一些预处理。
调用就像这样简单:
user@host:~/ $ strings mydir/settings.dat