首页 > 解决方案 > 找到这个字节串的编码

问题描述

好的,这可能是一个非常模糊的不适定问题。但无论如何我都会尝试一下。

我已经通过使用读取了 .data 文件的第一行

with open('raw_000.data', 'rb') as f:
    A = f.readline()

(仅使用“r”,它使用了 UTF-8 编码并且失败了)。

这给了我以下字节字符串

b'\x10\xa2\x8f\xbc-X\x98?\xfe\xd4\x17>\xdd\xda\x0e\xbf\xdc\xc5d?e\x19\x91?\xe0m\xb0<\xe7\xa8R @=\xca\xbd>\x94\x91\xb2\xbf\xba\xb3u>)\xbe\x01\xc0\x05\x1f\x83\xbf#\x04\xe2\xbf\x80\xbd;>\xe5 \x0e<\xc0\x0cS0?\xbd\xcaG?\x15\x9c\x07\xc0lX\x9d?\xc5\xa3j\xc0X+D\xc0T\x91\xad?\x13\x87\xdd\xbfjCs?m\ xdd\x02@\xebBi\xbf\xfc\xd8g=*NM\xbf&\x94&\xc0\x94\x91\xb2?=\xca\xbd>\xfc\xbfm\xbf\xf5\x96\x9f?\xf4\ x8b\xc0\xbfAz\x12@X\xc6\xee\xbe\x84\t\xcf\xbf\x1d\xdb\x93\xbfpw\x19\xc0\xbc\xe0\x85>|\xd5\xa1?\xe5 \x0e\xbc?\x80\xbd\xbb=|\xc0\xf7\xbe\\xc5\xda\xbe\xacB\xe4\xbf\x99\xbb\r@NGB\xbf\xaa\xbd~@;\ xc0\xf2\xbf\x1a\xd1\xc8>\xdc\xc5\xe4\xbfe\x19\x11\xc0\x10\xa2\x8f<-X\x98\xbf\n'

现在这应该包含一些有意义的数据。但我不知道如何“解码”这个,就像......什么类型的解码......我所知道的是

chardet.detect('...')

给了

{'confidence': 0.0, 'encoding': None}.

除此之外,文件 raw_000.data 来自 philips 的 MRI 机器。但是,我也找不到该区域的任何文档。

我还有什么其他选择?

标签: pythonbyte

解决方案


好吧,显然有一种叫做 Little Endian Ordering 的东西。从来不知道它,但幸运的是有一个维基百科页面

https://en.wikipedia.org/wiki/Endianness

当然,我们也可以通过使用 struct 包将这些信息提供给 python,如下所示:

import struct

with open('your_byte_file', 'rb') as f:
   A = f.readline()

res = struct.unpack('<f', A)

在这里,<-sign 告诉我们正在处理 little Endian Ordering, details。并且f告诉我们我们期待一个 float, details


推荐阅读