想定されるシナリオ
10年前のSQLダンプファイルや、古いバージョンのExcelからエクスポートしたCSVを開く場面を想像してください。きれいなコードが表示される代わりに、``記号の羅列や、éのような奇妙な文字列が表示されることがあります。時には、VS Codeがテキストのレンダリングすら試みず、ファイルがバイナリであると主張する通知バーが表示されることもあります。
ファイルはバイナリであるか、サポートされていないテキストエンコードを使用しているようです。「エンコード付きで再度開く」コマンドを使用して開いてください。
根本的な原因は、単純な認識の不一致です。VS Codeは、ウェブの95%以上で標準となっているUTF-8を想定しています。しかし、ファイルがWindows-1252、Shift-JIS、あるいはUTF-16を使用している場合があります。エディタがこれらの生のバイトデータをUTF-8にマッピングできない場合、画像やPDFを読み込もうとしていると判断し、処理を停止します。
クイック修正:正しいエンコードで再度開く
すぐにファイルを読み込む必要がありますか?VS Codeに対して、それらのバイトデータを翻訳するためにどの「辞書」を使用すべきかを手動で指定できます。以下の手順に従ってください。
- ウィンドウ右下のステータスバーを確認します。「UTF-8」または「Binary」と表示されている箇所を探してください。
- そのテキストをクリックしてコマンドパレットを表示させます。
- ドロップダウンから**「エンコード付きで再度開く (Reopen with Encoding)」**を選択します。
- VS Codeがいくつかのオプションを表示します。古いWindowsファイルの場合はWindows-1252が一般的です。日本のレガシーシステムからのファイルであれば、Shift-JISやEUC-JPを試してください。
- テキストが即座に読み取り可能になるはずです。まだ文字化けしている場合は、同じ手順を繰り返し、**「内容から推測 (Guess from content)」**を選択してください。
恒久的な修正:ファイルをUTF-8に変換する
ファイルを開くことができたのは、解決の半分に過ぎません。チームメンバーが同じエラーに悩まされないように、ファイルを恒久的にUTF-8に変換しましょう。これは、Gitのような現代のバージョン管理システムにおける業界標準です。
- ステータスバーで再度エンコード名を確認します(先ほど選択した「Shift-JIS」などが表示されているはずです)。
- それをクリックし、今回は**「エンコード付きで保存 (Save with Encoding)」**を選択します。
- リストからUTF-8を選択します。
Ctrl + S(Macの場合はCmd + S)を押して変更を保存します。
これでファイルが最新化されました。今後、他の開発者がコードをプルした際にエンコードを推測する必要はありません。
エンコード検出の自動化
レガシーデータを日常的に扱う場合、手動でエンコードを切り替えるのは面倒です。自動推測機能を有効にすることで、VS Codeに重労働を任せることができます。この機能はバイトパターンを分析し、最も可能性の高い文字セットを選択します。
Ctrl + ,(またはCmd + ,)を押して設定を開きます。files.autoGuessEncodingを検索します。- チェックボックスをオンにして有効にします。
巨大なファイルを開く際に、わずかなオーバーヘッドが発生することに注意してください。ほとんどのユーザーにとって、その利便性はミリ秒単位の遅延を上回るメリットがあります。
エンコードされた文字列への対処
ファイル自体はUTF-8であっても、コンテンツが意図的に難読化されている場合があります。これはAPIログや、Base64データを含むJSONファイルでよく見られます。もしSGVsbG8gV29ybGQ=のような文字列を見かけた場合、ファイルのエンコードを変更しても解決しません。
このような場合、私はToolCraftのBase64デコーダーを使用します。これにより、文字列を素早くデコードして元のデータを確認できます。サーバー側のログを記録せずに機密性の高い文字列を処理できるため、ランダムなオンラインコンバーターよりも安全です。
検証:修正を確認する方法
画面上で問題なく見えても、完全に修正されたと思い込まないでください。以下のクイックチェックを実行しましょう。
- ステータスバーの確認:「UTF-8」と明示的に表示されていることを確認します。
- **リロードテスト:**タブを閉じて再度開きます。「binary」の警告が出ずに即座に開くはずです。
- **Git Diff:**ターミナルで
git diffを実行します。文字化けしていた箇所が正しい文字に置き換わっていることを確認してください。なお、エンコードの変更により、ファイル内の全行が「変更済み」としてマークされる場合があることに注意してください。
主なエンコード一覧
ソース素材
想定されるエンコード
古いWindows/ExcelのCSV
Windows-1252
古いLinux/Unixのテキストファイル
ISO-8859-1
日本のレガシーシステム
Shift-JIS
標準的なモダンコード
UTF-8

