M5Stack(PlatformIO)環境での奇妙なエラーと回避方法

謎のエラーメッセージ

UnicodeDecodeError: ‘cp932’ codec can’t decode byte 0x98 in position 134: illegal multibyte sequence

というエラーメッセージで、C++(Arduino)のswitch~case文の中で起きました。「multibyte」とありますが、特に日本語を使ってるとかはありません。

case 0xc0:
    uint8_t r = 0x00;
    break;

色々と試行錯誤したところ、case文のコードを中括弧({})で囲むと、コンパイルエラーが消えてくれました。

case 0xc0:
    {
        uint8_t r = 0x00;
    }
    break;

ビルド環境

  • VisualStudioCode(1.47.2)
  • PlatformIO-Core(4.3.4)
  • PlatformIO-Home(3.2.3)
  • platformio.iniは以下。
[env:m5stack-core-esp32]
platform = espressif32@1.12.4
board = m5stack-core-esp32
framework = arduino
monitor_speed = 115200
lib_deps =
  # Using a library name
    EL_dev_arduino
    M5Stack@0.2.8
build_flags =
    -D EL_DEBUG

問題が再発しました。(2020/11/2)

今度はC++のソースのどこに悪いのか、さっぱりです。

そこで、エラーメッセージを頼りにplatformio自体のpythonコード(proc.py)を弄ることにしました。(下記コードのos.fopen()メソッドの引数「encoding=”utf-8″」を追加)

class AsyncPipeBase(object):
    def __init__(self):
        self._fd_read, self._fd_write = os.pipe()
        self._pipe_reader = os.fdopen(self._fd_read, encoding="utf-8")

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA