はじめに
皆さんは、VisualStudi Codedで、Shift-JIS で書かれたテキストファイルを、UTF-8に変換した事はありませんか?
他にもBOMありUTF-8をBOM無しに変換したり……
実はこの機能、文字化けしたファイルを文字化けしたまま別のエンコードで保存してしまうとUndo(Ctrl+Z)が使えないことがあるんです。
という訳で具体的にどういう場合に使えないのか検証しました。
検証
検証用にBOM無しUTF-8で書かれたファイルを用意しました。
検証は以下の通りに行います。
環境
- Windows 11 Home (22H2) 22621.819
- Visual Studio Code (1.73.1)
- 拡張機能は無効化する(--disable-extensions オプションを使用)
検証方法
下記の3パターンで、Undo(Ctrl+Z)で文字化けさせ読める状態に戻せるか試します。
名前 | 検証開始時のエンコード | もともとファイルは? |
---|---|---|
検証1 | UTF-8 | 文字化けしていない |
検証2 | Shift JIS | 文字化けしていない |
検証3 | Shift JIS | 文字化けしている |
-
検証1 Visual Studio Codeで作成したばかりのファイル(Visual Studio Codeを閉じていない)の場合
- このファイルをShift JISで保存(エンコード付きで保存)
- UTF-8で再度開き文字化けさせる(エンコード付きで再度開く)
- UTF-8で保存(エンコード付きで保存)
- Undo(元に戻せるか試す)
-
検証2 Shift JISで書かれたファイルを(Shift-JISで)Visual Studio Codeで開いた場合
- Shift JISファイルを開く(文字化けしていない状態で開かれる)
- UTF-8で保存(エンコード付きで保存)
- Undo(元に戻せるか試す)
-
検証3 Shift JISで書かれたファイルを(UTF-8で)Visual Studio Codeで開いた場合
- UTF-8でファイルを開く(文字化けした状態で開かれる)
- UTF-8で保存(エンコード付きで保存)
- Undo(元に戻せるか試す)
検証結果
ここからは、言葉で説明が難しいので動画です!!
検証1 Visual Studio Codeで作成したばかりのファイル(Visual Studio Codeを閉じていない)の場合
普通に戻せますね
検証2 Shift JISで書かれたファイルを(Shift-JISで)Visual Studio Codeで開いた場合
こちらも戻せました
検証3 Shift JISで書かれたファイルを(UTF-8で)Visual Studio Codeで開いた場合
こっちは最後、変化がないのでキー入力を可視化しました
表にまとめると下記の通りになります。
名前 | 検証開始時のエンコード | もともとファイルは? | 文字化けさせた後、元に…… |
---|---|---|---|
検証1 | UTF-8 | 文字化けしていない | 戻せた |
検証2 | Shift JIS | 文字化けしていない | 戻せた |
検証3 | Shift JIS | 文字化けしている | 戻せない |
まとめ
いかがだったでしょうか?
エンコード付きで保存とエンコード付きで再度開く
すごい近い位置にあるコマンドなのに間違えるとファイルに不可逆的な変更が加えられる危険な機能の話でした。
文字コードを自動判定する「Files:Auto Guess Encoding」をつける等対策をしていきたいところです。
くれぐれも私のように上司からの……
おっと、誰かが来たようです。
おわり