Fortran未格式化文件的字符编码?
我正在读取一个Fortran的无格式文件。如果我用Python来读取这些文件,
import struct
f = open(filename,'r')
values = struct.unpack('%20s',f.read(20))
我得到的字符像这样:
\xf8, \xbf, \xad, \xe8, \xd8, \xec, \xd5, \x10, \xfd, \xbf
等等。每一个字符的长度都是1,而字符串替换的功能对它们不起作用。
我正在处理的是什么字符集呢?
编辑
这是我用f.read()
得到的部分输出:
\xdf\xde#\xc0|\x18B\x9f\xec\xd6!\xc0]\x0b\x08b\xb1k#\xc0R#g}\xae\x14\xe8?\xde\x1c\x84b\x07S\xe8?.\x0b\x15\x07\xae\x99\xc5\xbf\xac\x9c\xa4\xf0\x8aV\xe4?K\t\x8a(3/\x07@\x97]rW\x8e?\x0b@\xe8\xfe\x9f0\x92P\x04@\xc6&\x98-VV\x07@\xa2\x8e\x86\xa8\xf2-\x18@N\xca\xa6\xc9\xe3W\x1b@\x1f\x96\x0f\xb2\nH\x18@\xc31Jv\xf8\x98\x18@\xacOBu\xcf\xd6'@A\xf0\x9fJ\x84{(@\x1d`.N\x9b\x15'@4\xa5\xb2\x91)\xd3'@\x851\x9d\x83\x98\x00\x02\xc0\xa2Iy\x1b\xca\xf2\x04\xc0eu\rt\xb2\xd5\x04\xc0V\x92\xaf\x9f\xf6\xbd\x02\xc0:\r\xfc\xc6\xf8\xfb\xae\xbf!\x95QZ\xcdx\xe7\xbf\x8e\xd9O\xdf\xd1\xc0\xe4?\xbe\xba\xae\xa5\xb3\x9e\xac\xbfJ0h('=\xf0?\x83\xd67\xcf\n4\xe0?$\xf9\x0c\x00\x05\xe5\xfc?\x97+c\x9d\xd1\xf0?V\xfc\xc8\xe4\x12\x98\xf3?m\x8aa\xc4\xe5}\xf8?s\x9b\xb4{\xf22\x00@\xc3t'\xd0-\xdc\xf5?\xf9\x8eb&Y\x7f\x0c\xc0\x8c\x91\xa7\xe2\xf0|\x0c\xc0d\xd3b\x1a_\x05\x06\xc0u\xa7\x9b\x8e\xcc\xaa\x0b\xc0\xe7\x8a0CG+\x0f\xc0s\x10\x07\x8f
1 个回答
2
你有没有关于这个文件是怎么写的具体信息,比如用了什么Fortran的write
语句?如果没有,那你只能猜了。要知道,未格式化的记录通常包含的是二进制数据,比如整数或浮点数,而不是编码的字符数据。我猜你看到的是二进制整数。此外,在Python中打开这个文件时,应该以二进制模式打开('rb'
),这在像Windows这样的系统上是很重要的。
更新:现在你已经透露数据的类型是real(8), allocatable :: xxx(:)
,并且是用以下方式写入的:
write(filenum) (xxx(i),i = 1,imax)
那么很明显,这些数据是二进制的,而不是编码的字符。