1

観察してください:

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'
>>>

アイアンパイソン:

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 に最初の行も文字列として扱わせるにはどうすればよいですか?

4

2 に答える 2

0

これは奇妙に見えますが、Python 2.7では、通常の文字列バイト文字列です。実際、byte()はの同義語ですstr。そして、印刷repr(bytes("hello"))すると'hello'、ではなく、が表示されますb'hello'。もちろん、Python3ではそれは別の話です。

つまり、CPythonですでにバイト文字列を取得しているので、実際には問題はないと思います(私は確かに何かが壊れているかどうかをチェックしてから、それを「修正」するためにもっと時間を費やします)。私はIronPythonを使用していませんが、文字列のデフォルトの型としてユニコードを使用していることを読みました(Python 3など)。私はb'string'、IronPython'string'ではCPython 2と同じことを意味すると結論付けています(そしてCPython'string'と同じことを意味しu'string'ます)。

于 2012-04-12T14:07:15.670 に答える
0

簡潔な答え:

str(next(input))

より長い答え: 最初がバイトで、2 番目が文字列であることはかなり奇妙です。おそらく単なるバグです。自己完結型の複製で問題を開いていただけますか?

于 2012-04-12T15:13:03.260 に答える