WindowsとMacで生じる文字コードの違い、いつも悩まされます。
文字コードを意識しよう
ローカルで完結する作業や、誰かに渡して終わりのファイルの作成などは基本的に文字コードを意識する必要はありません。
ただ作成したファイルをシステムで読み込んだりするときなどは、文字コードを意識する必要があります。
とくにWindowsで作成した日本語入りのCSVとかが紛れ込んでくると、文字コード要因のエラーがでるようになります。ほとんどのシステムはUTF8ファイルを前提としていますが、Windowsで作成されたファイルの文字コードは、Shift-JISだったりCP932だったりするからです。
なので、これらのファイルをベースに加工したりしてシステムにアップするときは、文字コードに気を付けないといけません。
そして、文字コードの確認は思いのほか、苦労します。
文字コードの確認方法
VSCodeの表記は、保存されている文字コードではない
VSCodeでファイルを開くと、ステータスバーの右の方に、UTF-8の文字がありますが、これはそのファイルがUTF-8で保存されているというわけではありません。
VSCodeがファイルを読み込んでいる文字コードです。
VSCodeはデフォルトではUTF8でファイルを読み込みます。なので、Shift-JISで保存されているファイルをVSCodeで開いたときも、UTF-8と表示されます。
ここが勘違いしやすく、UTF8で編集して保存したのに、なぜか文字化けするというようなことになります。
文字コード確認コマンド1 fileコマンド
文字コードの確認はコマンドでやります。
Macの場合は標準で、入っているfileコマンドでできます。
file --mime {ファイル名}
を実行すると、charset=xxx と出てくるので、それがそのファイルの文字コードになります。
また、nkfコマンドでも確認できます。
文字コード確認コマンド2 nkfコマンド
またnkfコマンドでも確認できます。nkfコマンドは、標準では入っていないので、インストールが必要です。MacだとHomebrewでインストールできます。
brew install nkf
nkfコマンドはgオプションで、文字コードが確認できます。
nkf -g {ファイル名}
nkf -gコマンドは文字コードだけが出力されるので、表記がシンプルでわかりやすいです。
ただ速度自体は、fileコマンドのほうが早いです。サイズが小さいファイルなら大差ありませんが、数百メガぐらいのファイルになってくると、体感できるぐらいfileコマンドの方が早いです。
じゃあ、nkfコマンドいらないじゃんというと、そうではなくてファイルの文字コードの変換はnkfコマンドでしかできないので、nkfコマンドのインストールは必要です。
ファイルの文字コードを変換する方法
VSCodeで変換する
VSCodeのステータスバーの文字コードをクリックするとメニューが出てくるので「Save with Encoding」で文字コードを変換できます。
理屈上は・・・
ただわかりづらいですし、できないときもある気がするので、個人的には使いたくないです。
どうせコマンドで確認するためにターミナル開きますし、後述のnkfコマンドでやってしまうほうがいいかと思います。
nkfコマンドで変換する
nkfコマンドで文字コードを変換できます。-wオプションでUTF8に、-sオプションでShift JISに変換できます。
ただこのコマンドは、標準出力なので注意が必要です。ファイルに保存する場合は、> で渡す必要があります。
UTF8で別名ファイルに保存するコマンド
nkf -w {ファイル名} > {保存先}
念のための確認
nkf -g {保存先}
まとめ
以上、文字コードの確認方法と変換方法についてでした。
文字化けしたファイルを復元したい程度なら、VSCodeでポチポチやるだけでいいですが、手動でシステムにUPするときとかはコマンドを使って、確実にやるためにも覚えておいた方が良いと思います!