如何使用Python将.dat文件的内容转换为人类可读的形式?

时间:2019-07-27 17:41:55

标签: python python-3.x file binaryfiles

我要读取和编辑一个名为“ 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 Ԁ ː ᙫ ␐☐ᜐ┐Ⱀ⨐ᴐሐ⼐【ㄐ㈐䠐倐䬐䴐ᄐἐḐ‐점퀐쬐촐

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