【问题标题】:Read file, not same result on windows or linux读取文件,在 windows 或 linux 上的结果不同
【发布时间】:2016-04-15 17:10:42
【问题描述】:

我有相同的代码,我在 raspberrywin7 上运行它,但我不能得到相同的结果

代码:

with open('file','rb') as fd:
    ttt = fd.read(4)
    print (ttt)
    seed = unpack('>I', fd.read(4))[0]
    print str(seed)    

linux 上我有很好的结果。

b')M7\xeb'
692926443

但在 windows 上,我有

>M7ù
1401564715

为什么会有这种差异?为什么在 linux 我有超过 4 个字符?

编辑: 我终于找到了获得相同结果的方法。

import codecs
with codecs.open("G:/InsideReCaptcha-master/enc", mode='rb') as fd:
    ttt = fd.read(4)
    seed = unpack('>I', ttt)[0]

不确定所有代码是否有用,但它可以工作。

【问题讨论】:

  • 在 Linux 上,您使用的是 Python 3。整数 692926443 是 b')M7\xeb' 的解压缩值,因此在 Linux 测试中,“文件”的字节 4-7 与字节 0-3 相同.在 Windows 上,您使用的是 Python 2(因为 print(ttt) 打印常规字符串而不是 bytes 文字)。此外,Windows 上的文件在字节 0-3 中有 b'>M7ù'。我不能说'ù' 的字节值是多少,因为它取决于控制台代码页。 Windows 上的文件在字节 4-7 中也有 b'S\x8a.+',解压为 1401564715。
  • 问题中删除您的解决方案并将其作为答案发布。

标签: python linux windows


【解决方案1】:

Linux 输出是二进制字符串表示,这就是它显示为 b'[STRING]' 的原因。重音字符显示为转义的 ASCII 替代。 Windows 输出是实际的字符串表示形式。要使它们相同,请使用 decode:

打印 b'a string'.decode('ascii')

【讨论】:

  • 在 windows 上打印 b'a string'.decode('ascii') ?与 linux 上的结果相同?
  • Windows 的 Python 似乎正在自动解码字符串。 Linux 不是并且正在让您知道它是二进制字符串。如果您想要一致的结果,尤其是在使用非 ASCII 或 utf-8 字符集时,请使用适当的字符集自行解码。
猜你喜欢
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
相关资源
最近更新 更多