[英]How to convert the content of a .dat file to a human readable form using Python?
有一个名为“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 Ԁ ː ᙫ ␐☐ᜐ┐Ⱀ⨐ᴐሐ⼐【ㄐ㈐䠐倐䬐䴐ᄐἐḐ‐점퀐쬐촐
.dat文件是通用的文件,可以是二进制或文本。 这些文件通常仅用于应用程序支持访问和使用,并且每个应用程序以不同方式处理 .dat 文件。 因此,与 .gif 或 .docx 文件不同,.dat 文件不遵循影响所有 .dat 文件的特定协议。
如果您想了解 .dat 文件如何工作并将其转换为人类可读的格式,您需要事先了解应用程序如何处理这些文件。
对于中文字符,您尝试通过UTF-16 格式解码二进制.dat 文件。 那不会改变文件内容; 您只是对bbbb bbbb bbbb bbbb = xxxx
的重复序列的字节序列进行分组,其中b
是字节, x
是十六进制数字。
许多 Unicode 字符是中文 [从技术上讲,它们被称为表意文字或表意文字],而其他字符则未使用,也称为保留字符。
不是 python 答案,但strings
命令行工具在逆向工程数据格式中通常是无价的,让您轻松浏览二进制文件以寻找熟悉的明文模式。 显然,如果使用某种加密/压缩(例如常用的 gzip),它将无济于事,需要先进行一些预处理。
调用它就这么简单:
user@host:~/ $ strings mydir/settings.dat
如果是二进制文件,那为什么要查看呢? 除非您事先知道 settings.dat 包含人类可读的字符,否则尝试“查找”一种编码以便输出是人类可读的字符是没有意义的,因为您不会成功。
另一方面,如果您确实知道 settings.dat 包含人类可读的字符,那么 utf-16 可能是错误的编码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.