マルチパート MIME HTTP POST の一部として、Python 3.3 で MIMEApplication を使用してバイナリ ファイルをエンコードしようとしています。すべてがバイナリバイトに設定されているにもかかわらず、文字 0x0d が改行 0xa として再解釈されるという問題があります。
0x0d を含むバイナリ文字列が誤って解釈される最小限のテスト シナリオを次に示します。
from email.encoders import encode_noop
from email.generator import BytesGenerator
from email.mime.application import MIMEApplication
import io
app = MIMEApplication(b'Q\x0dQ', _encoder=encode_noop)
b = io.BytesIO()
g = BytesGenerator(b)
g.flatten(app)
for i in b.getvalue()[-3:]:
print("%02x " % i, end="")
print()
出力は次のとおりです51 0a 51
。51 0d 51
これは、マルチパート http POST メッセージのバイナリ パートを生成するためのものであることに注意してください。