ArduinoIDEをアップデートしたらVSCodeのArduino出力で文字化け

# VSCode の Arduino出力が文字化けするようになった

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203949/e9fe7eb8-ebde-d8bf-648e-004fcf81eeb4.png)

Windows ArduinoIDE 1.8.7 を 1.8.8 にアップデートしたら発生した。

**※2025/03/20追記**
VSCodeのAduino拡張機能が非推奨になったので、私の環境も後継の「Arduino Community Edition」に変更しました。以下、後継版と非推奨版の両方を残しておきます。

# Arduino Community Edition（後継版）
インストール方法は、[@kotekさんのこちら](https://qiita.com/kotek/items/265f6eadfddfd3364e2f)を参照してください。私の場合は、「Arduino CLI」を別途インストールしておらずです。

- Windows10
- ArduinoIDE 2.3.4
- VisualStudioCode 1.98.2 + 「Arduino Community Edition」

という状態です。「Arduino CLI」は「Arduino Community Edition」のバンドル版を使っています。@kotekさんとは少し違いますが、ちゃんと説明されているので問題なく設定できました。

```
Arduino: Command Path を空にする
Arduino: Path を空にする
```
が違うだけです。追加で
```
arduino.logLevel: verbose
arduino.analyzeOnOpen: false
```
を入れたかな？ってぐらいです。設定を変更したらVSCode再起動した方がいいです。

## 文字化け
ビルドログで結構重要なこの辺りが文字化けします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203949/82ba616c-198b-4cd4-aa59-9aa6f8dbbe74.png)

## 対応
「arduino-cli.l4j.ini」を追加するだけです。このパスは、arduino-cli.exeと同じ場所です。
```C:\Users\%username%\.vscode\extensions\vscode-arduino.vscode-arduino-community-0.7.2-win32-x64\assets\platform\win32-x64\arduino-cli\arduino-cli.l4j.ini```

```ini
-Dfile.encoding=UTF8
```
（別途「Arduino CLI」をインストールして使っている人は、パス変えてください。※試してませんが、たぶん）


### 直ったッ
VSCode再起動してから。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203949/db3792b8-1ef1-430f-b659-4d5dc810f4f9.png)

以上。
**※2025/03/20追記 ここまで**

**※2025/03/23追記 ここから**
## ライブラリのヘッダファイルが#includeできない
ところが、
```
#include "Ambient.h"
```
のようなライブラリヘッダがNotFoundになります。pathが通っていないと思い、色々調べてsetting.jsonやc_cpp_properties.jsonを設定しまいしたがダメでした。この拡張機能のissueにあったのですが、どやらデフォルトの作業フォルダを違う場所に設定しているとダメなようです。ArduinoIDE-2.xxではコンパイルOKなのですが、こちらのVSCode拡張機能ではダメなようです。

```C:\work\Arduino```･･･失敗

```C:\Users\{username}\Documents\Arduino```･･･成功

どうやら ```C:\Users\{username}\Documents\Arduino\libraries``` にライブラリがないとダメなようです。なので作業フォルダごとデフォルトにしないと面倒なことになります。

```Documents```好きじゃないんだよね...

# 拡張機能 Arduino（非推奨版）

※本家 Arduino拡張機能 がサポートを停止し非推奨になりました。

## arduino_debug.l4j.ini を修正する方法(2021/03/10追記)
これまでは次項の「Extension を修正する方法」をしていたが、 Extensionのアップデートのたびに戻ってしまうので調べたら本家のissueにあった方法を試してみた。

C:\Program Files (x86)\Arduino\arduino_debug.l4j.ini
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203949/1bf68cd6-403f-beab-4d59-19a61ef257df.png)

```-Dfile.encoding=UTF8``` を ```-Dfile.encoding=SJIS``` に変更する。

ArduinoIDEは UTF8 で出力して、ArduinoExtension では、SJISをUTF8に変換しようよして文字化けしている。これまでは、Extension の 「SJISをUTF8に変換」処理をコメントアウトして対処していた。これを ArduinoIDE を SJIS で出力して、Extension で SJISをUTF8に変換 をそのままさせるように。※無駄っちゃー無駄だね。

なお、アクセス権がなくて修正ができない場合は、ファイルのプロパティを開いて、セキュリティ＞編集＞Users(･･･)を選択＞フルコントロール＞チェックON
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203949/befcd0e8-2f47-c304-ae4a-7a6070aa8ea4.png)
ざっと確認して、ArduinoIDEとVSCodeの出力は上手くいっているようだった。もし問題があるようなら、上記をもとに戻して、次項の「Extension を修正する方法」にしてください。その際、コメント頂けると助かります。

**※2021/04/13追記**
ArduinoIDEを 1.8.12 → 1.8.13 にしたところ、```arduino_debug.l4j.ini``` が初期化されてしまいました。上記をもう一度設定することで直ります。
また、これは私だけかもしれませんが、ESP32のボードマネージャの表示がされなくなりました。ESP32用のボードマネージャの設定をし直したら表示されるようになりました。


## Extension を修正する方法
しばらく放っておいたが 1.8.9 になっても直らないんでググった。

[Arduino for Visual Studio Code出力の文字化け対策](https://lang-ship.com/blog/?p=391)

原因は色々あるみたいだが今回は、ArduinoIDE をアップデートしたら発生したと思うのでArduinoIDE側の出力が変わったと思われます。
しかし、取り敢えずの対応は VSCodeのArduino Extension を修正してしまおうと言うものだと思う。具体的には下記ソースの

変更：2019.06.24
0.2.25→0.2.26
変更：2019.07.17
0.2.26→0.2.27
変更：2020.02.09
0.2.27→0.2.29
変更：2020.03.27
0.2.29→0.3.0
変更：2020.10.16
0.3.0→0.3.2
変更：2021.03.30 
0.3.0→x.x.x

「x.x.x」は arduino Extension のバージョン

```
C:\Users\%username%\.vscode\extensions\vsciot-vscode.vscode-arduino-x.x.x\out\src\common\util.js
```

の 205行目辺りをコメントアウトする。

```js:
/*
        if (os.platform() === "win32") {
            try {
                const chcp = childProcess.execSync("chcp.com");
                codepage = chcp.toString().split(":").pop().trim();
            }
            catch (error) {
                outputChannel_1.arduinoChannel.warning(`Defaulting to code page 850 because chcp.com failed.\
                \rEnsure your path includes %SystemRoot%\\system32\r${error.message}`);
                codepage = "850";
            }
        }
*/
```


##直ったッ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203949/8ab09f06-695b-17a0-f6d7-4c164cd3ea3b.png)


今後は、Arduino Extension 側の正式対応になるんかな？

以上。