技術

nkfコマンドを使って文字コードを自由自在に!

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するときとかはコマンドを使って、確実にやるためにも覚えておいた方が良いと思います!