LoginSignup
3
0

More than 1 year has passed since last update.

Visual Studio Codeで文字コードを変えたら二度と読めなくなったので検証する

Last updated at Posted at 2022-12-06

はじめに

皆さんは、VisualStudi Codedで、Shift-JIS で書かれたテキストファイルを、UTF-8に変換した事はありませんか?

他にもBOMありUTF-8をBOM無しに変換したり……

実はこの機能、文字化けしたファイルを文字化けしたまま別のエンコードで保存してしまうとUndo(Ctrl+Z)が使えないことがあるんです。

という訳で具体的にどういう場合に使えないのか検証しました。

image.png

検証

検証用にBOM無しUTF-8で書かれたファイルを用意しました。

image.png

検証は以下の通りに行います。

環境

  • 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. 検証1 Visual Studio Codeで作成したばかりのファイル(Visual Studio Codeを閉じていない)の場合

    1. このファイルをShift JISで保存(エンコード付きで保存)
    2. UTF-8で再度開き文字化けさせる(エンコード付きで再度開く)
    3. UTF-8で保存(エンコード付きで保存)
    4. Undo(元に戻せるか試す)
  2. 検証2 Shift JISで書かれたファイルを(Shift-JISで)Visual Studio Codeで開いた場合

    1. Shift JISファイルを開く(文字化けしていない状態で開かれる)
    2. UTF-8で保存(エンコード付きで保存)
    3. Undo(元に戻せるか試す)
  3. 検証3 Shift JISで書かれたファイルを(UTF-8で)Visual Studio Codeで開いた場合

    1. UTF-8でファイルを開く(文字化けした状態で開かれる)
    2. UTF-8で保存(エンコード付きで保存)
    3. Undo(元に戻せるか試す)

検証結果

ここからは、言葉で説明が難しいので動画です!!

検証1 Visual Studio Codeで作成したばかりのファイル(Visual Studio Codeを閉じていない)の場合

普通に戻せますね

元UTF-8no.gif

検証2 Shift JISで書かれたファイルを(Shift-JISで)Visual Studio Codeで開いた場合

こちらも戻せました

Sjis成功.gif

検証3 Shift JISで書かれたファイルを(UTF-8で)Visual Studio Codeで開いた場合

こっちは最後、変化がないのでキー入力を可視化しました

Sjisの.gif

表にまとめると下記の通りになります。

名前 検証開始時のエンコード もともとファイルは? 文字化けさせた後、元に……
検証1 UTF-8 文字化けしていない 戻せた
検証2 Shift JIS 文字化けしていない 戻せた
検証3 Shift JIS 文字化けしている 戻せない

まとめ

いかがだったでしょうか?

エンコード付きで保存エンコード付きで再度開く
すごい近い位置にあるコマンドなのに間違えるとファイルに不可逆的な変更が加えられる危険な機能の話でした。
文字コードを自動判定する「Files:Auto Guess Encoding」をつける等対策をしていきたいところです。

くれぐれも私のように上司からの……

おっと、誰かが来たようです。

おわり

3
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0