Paho-MQTTでUnicodeDecodeErrorが起こった話→bytearrayを使う

 File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 1693, in _send_publish
  upayload = payload.encode('utf-8')

UnicodeDecodeError: 'ascii' codec can't decode byte 0xaf in position 0: ordinal not in range(128)

なぜかペイロードをASCIIとみなしてUTF-8に変換しようとするので、整数値をstruct.packでバイナリにしているようなケースに「運悪くASCII以外の文字になった時だけ実行時例外が起こる」という罠にはまった。

    • -


# single('\xfe')  # NG
single(bytearray('\xfe'))  # OK

なるほど、bytearrayにすればOKでした。