CPython和IronPython之间关于zip文件读取的奇怪不一致

时间:2012-04-12 12:18:02

标签: python ironpython

请观察:

CPython的:

PS Z:\dev\poc\SDR> python
Python 2.7.1 (r271:86832, Nov 27 2010, 17:19:03) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from zipfile import ZipFile
>>> z=ZipFile('d:/aaa.zip')
>>> input=z.open(z.namelist()[0])
>>> next(input)
'aaa,bbb\n'
>>> next(input)
'123,456\n'
>>>

IronPython的:

PS Z:\dev\poc\SDR> ipy64
IronPython 2.7.1 (2.7.0.40) on .NET 4.0.30319.225
Type "help", "copyright", "credits" or "license" for more information.
>>> from zipfile import ZipFile
>>> z=ZipFile('d:/aaa.zip')
>>> input=z.open(z.namelist()[0])
>>> next(input)
b'aaa,bbb\n'
>>> next(input)
'123,456\n'
>>>

请注意,IronPython将第一行显示为b'aaa,bbb\n',而CPython显示'aaa,bbb\n'。这种差异非常重要,因为前者只是字节,而后者是字符串。

如何让IronPython将第一行视为字符串?

2 个答案:

答案 0 :(得分:0)

这看起来很奇怪,但在python 2.7中,常规字符串一个字节字符串。实际上,byte()str的同义词。如果您打印repr(bytes("hello")),则会看到'hello',而不是b'hello'。在python 3中当然是另一个故事。

简而言之, 已经在CPython中获取了一个字节字符串,所以我相信没有实际问题。 (在花更多时间试图“修复”它之前,我肯定会检查是否有什么东西坏了)。我不使用IronPython,但我读过它使用unicode作为字符串的默认类型(如Python 3)。我得出的结论是,IronPython中的b'string'与CPython 2中的'string'意味着相同(而'string'与CPython的u'string'意味着相同)。

答案 1 :(得分:0)

简短回答:

str(next(input))

更长的答案:第一个是字节而第二个是字符串,这很奇怪。这可能只是一个bug。你能用一个独立的复制品来open an issue吗?