あなただけのPython 2.6以降をサポートする必要があると仮定すると、あなたは、単にのためbytes
を使用することができ、うまく、バイト。 b'\x0a\x0b\x00'
などのバイトオブジェクトを作成するには、b
リテラルを使用します。ファイルを操作する場合は、b
(open('file.bin', 'rb')
のように)が含まれていることを確認してください。
ただし、反復と要素アクセスが異なることに注意してください。このような場合、チャンクを使用するコードを記述することができます。 b[0] == 0
(Python 3)またはb[0] == b'\x00'
(Python 2)の代わりにb[0:1] == b'\x00'
と書いてください。他のオプションは、bytearray
(バイトが変更可能な場合)またはヘルパー関数を使用しています。
Python 2では、文字列はunicode
で、Python 3の移植とは独立しています。そうでなければ、ASCII以外の文字に遭遇するとコードが間違っている可能性があります。等価はPython 3でstr
です。
u
リテラルを使用して文字列(u'Düsseldorf'
など)を作成したり、すべてのファイルをfrom __future__ import unicode_literals
で開始するようにしてください。必要に応じて、ファイルを開始して# encoding: utf-8
でファイルエンコードを宣言します。
io.open
を使用すると、ファイルから文字列を読み取ることができます。ネットワークコードの場合は、バイトを取り出してdecode
を呼び出して文字列を取得します。
Python 2.5または3をサポートする必要がある場合。2、リテラルを変換するにはsixを見てください。
アサーションをたくさん追加して、文字列を操作する関数がバイトを取得しないようにしたり、逆もまた同様です。いつものように、100%カバレッジの良いテストスイートは大いに役立ちます。
なぜ、 'str'に固執するだけではないのですか?バージョン間でも同じですよね? – zondo
@ zondo:いいえ、そうではありません。 Python 3の 'str'は、' 2の 'unicode'とほぼ同じです。Python 3の' str'に生のバイナリデータを格納することはできません。 –
'b '..'残りのケースを処理するには 'six'のようなブリッジライブラリを使用します。 –