私はstdinの内容を一度に1022バイト読み込もうとしています。このコードは、テキストファイルで正常に動作します。しかし、バイナリファイルを入力するときにUnicodeDecodeErrorが返されます。以下のデータはsys.stdinです。Python3のUnicodeDecodeErrorがバイナリファイルを読み込むときstdin
def sendStdIn(conn, cipher, data):
while True:
chunk = data.read(1022)
if len(chunk)==1022:
EOFAndChunk = b'F' + chunk.encode("utf-8")
conn.send(encryptAndPad(cipher,EOFAndChunk))
else:
EOFAndChunk = b'T' + chunk.encode("utf-8")
conn.send(encryptAndPad(cipher,EOFAndChunk))
break
return True
バイナリファイルが、私はその後、私は以下で終わる本質的python A3C.py < 1MB.bin
でファイルを実行しdd if=/dev/urandom bs=1K iflag=fullblock count=1K > 1MB.bin
を呼び出すことによって行われました。
Traceback (most recent call last):
File "A3C.py", line 163, in <module>
main()
File "A3C.py", line 121, in main
EasyCrypto.sendStdIn(soc, cipher, sys.stdin)
File "EasyCrypto.py", line 63, in sendStdIn
chunk = data.read(1022)
File "/usr/lib64/python3.5/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe8 in position 0: invalid continuation byte
私は一度にサーバ側片に、このクライアント側からそれらを送信する必要があるため、それはバイナリファイルのセクションを読むことができるので、私はこれを行うことができますどのように任意のアイデア。ありがとう!
修正点は、 'sendStdIn'ではなく' main() 'でコード化することです。あなたは完全なトレースバックを含めて良いこと! :-) –