ファイルを読み込んで処理しようとしています。これはPython2.7ではうまくいきましたが、Python 3ではうまく動作しませんでした。 Python 2.7では、Python 3ではエンコーディングなしで動作しますが、Python 3ではすべての組み合わせをエンコーディングなしで試しました。バイトをPython 3.6の文字列に変換します。
ディープダイビング後、read
で返されるコンテンツが両方のバージョンで異なることがわかりました。
作品はPython 2.7でのコード:
>>> f = open('resource.cgn', 'r')
>>> content = f.read()
>>> type(content)
<type 'str'>
>>> content[0:20]
'\x04#lwq \x7f`g \xa0\x03\xa3,ess to'
>>> content[0]
'\x04'
をしかし、Pythonの3で:
>>> f = open('resource.cgn','r')
>>> content = f.read()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python3.6/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec cant decode byte 0xa0 in position 10: ordinal not in range(128)
>>> f = open('resource.cgn','rb')
>>> content = f.read()
>>> type(content)
<class 'bytes'>
>>> content[0:20]
b'\x04#lwq \x7f`g \xa0\x03\xa3,ess to'
>>> content[0]
4
>>> content.decode('utf8')
Traceback (most recent call last):
File "<console>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 10:
invalid start byte
私は、Python 2.7と同じ出力を取得したいと思います。 content
はタイプstring
とcontent[0]
のものでなければならない'\x04'
をstrが、私はこれを取得する方法について4
任意のポインタをint型ではないことでしょうか?私は何の成功もなしにエンコードを試みました。
あなたが '' content.decode( 'unicode_escape')を試したことがありますか? –
'content [:1]'はどうですか?それはあなたに 'b '\ x04'を与えるでしょう。 –
@SamChatsの解決策は私のために働きます。 – nCessity