Shift JISやEUCなどからUTF-8へ変換する方法

ソースコードなどのテキストファイルを共有すると、エディタなどで開いたときに日本語が文字化けすることがあります。そのときの対処方法です。

エンコードタイプ

コンピューターは基本的に数値で物事を判別し処理します。

コンピューターが扱う文字もその仕組で処理します。

26文字の英語のアルファベットも数値に変換されて処理します。

そして日本語も同様に数値に変換されてコンピューターは識別し処理します。

この変換のことをエンコードといい、アルファベットはどの種類のコンピューターでも同じ数値データが割り当てられます。

なので、英語で書かれたテキストファイルはそれを作成したコンピューターと違うコンピューターで表示しても文字化けはしません。

ところが日本語はコンピューターの種類によって(正確にはOSの種類によって)、日本語を扱うときのエンコードが異なります。

UnixはEUC、WindowsはShift_JIS、MacはMacJapaneseやUTF-8など異なったエンコードタイプでテキストを扱います。

そうするとWindowsでテキストファイルを作って、Macでそれを表示すると文字化けが発生して読めません。

ソースコードなどのテキストファイルを共有したら、文字化けが発生するのはこういった理由があるからです。

どのOSも全てのエンコードタイプを扱えるようになっているのですが、デフォルトで扱うエンコードタイプが異なるので文字化けが発生するのです。

こういった混乱を防ぐため現在では、テキストファイルを作成するときのエンコードタイプをデフォルトでUTF-8にしましょうという風潮になっています。

とくにソースコードは、一部のシステムやサービスではUTF-8を要求事項としているものもあります。

とはいっても、現実的にはそうはいきません。

やはり文字化けは発生するので、その場合はどのように対処すればいいのかをまとめます。

エンコーディングを変換する

テキストファイルを表示するには、Windowsのメモ帳やMacのテキストエディタ、それから各種ソースコードを編集するためのエディタなどがあると思います。

現在ではテキストのエンコードタイプを自動で判別して表示してくれるものが多いですが、自動で判別してくれないときはエンコードタイプを設定から自分で切り替えると表示されます。

そこで、表示できるようになるだけで良い場合は問題ないですが、そのテキストファイルのエンコードタイプを変換して保存したい場合は、方法がアプリやツールによって異なります。

ここではその方法をまとめたいと思います。

大きく分けて3種類の方法となります。

  • プログラミングするときに使う有名なエディタATOMとVSCodeを使った方法
  • このようなエディタが無い場合、Windowsのメモ帳やMacのテキストエディタを使った方法
  • コマンドラインツールを使った方法

となります。

ATOMを使って変換

ATOMでは設定を変更しない限りデフォルトのエンコードタイプはUTF-8となっています。

例えばShift_JISで作成したテキストファイルを表示すると以下のように文字化けします。

そしてATOMの画面下に表示しているエンコードタイプをクリックしてShift_JISに変更すると正しく表示されます。

このまま編集して保存してもエンコードタイプはShift_JISのままです。

これをUTF-8に変換したいときは拡張パッケージを使います。

ConvertToUTF8

まずは設定からパッケージをインストールします。

インストールパッケージから「convert-to-utf8」を探してインストールします。

このパッケージはメニューから選択するだけでエンコードタイプをUTF-8に変換してくれます。

Shift_JISをUTF-8に変換したい場合は、「Packages」ー「ConvertToUTF8」ー「Japanese(Shift_JIS)」を選択します。

するとファイルの中身をUTF-8に変換してくれるので、このままファイルを保存すれば完了です。

VSCodeを使って変換

VSCodeもデフォルトのエンコードタイプはUTF-8になっています。

これもShift_JISで作成したテキストファイルを表示すると文字化けします。

VSCodeを使って変換するときは拡張機能はいりません。

デフォルトで変換できる機能があります。

まずはVSCode画面下に表示しているエンコードタイプをクリックして以下のメニューを表示します。

表示されたメニューの「エンコード付きで再度開く」を選択します。

そして表示されたメニューの「Japanese (Shift JIS)」を選択します。

すると文字化けがなくなりShift_JISで表示されます。

これをUTF-8に変換して保存したい場合は、再度、画面下に表示しているエンコードタイプをクリックして以下のメニューを表示します。

今度はここで「エンコード付きで保存」を選択します。

そして表示されたメニューの「UTF-8」を選択します。

するとShift_JISで表示されていたファイルの中身がUTF-8に変換されてこのまま保存するとUTF-8で保存できます。

Windowsのメモ帳を使って変換

メモ帳はファイルを保存する際にエンコードタイプを設定できます。

まずはメモ帳でテキストファイルを開き、名前を変えて保存します。

するとファイル名を入力する画面下に「文字コード(E):」項目があるので、ここでUTF-8を選択して保存します。

メモ帳はこれで完了です。

Macのテキストエディタを使って変換

MacのテキストエディタはWindowsのメモ帳と似ていますが少し保存方法が異なります。

名前を変えて保存が直接できないので、一旦ファイルの複製(コピー)をテキストエディタで実行します。

新しい画面で開いたファイルのコピーを保存するときにファイル名を入力する画面が表示されるので、この画面下にある「標準テキストのエンコーディング:」項目でUnicode (UTF-8)を選択して保存します。

Macのテキストエディタはこれで完了です。

コマンドラインツールを使って変換

ターミナルやコマンドシェルを使ってコマンドで指定のファイルのエンコードを変換します。

コマンドを使って変換するときの利点は、複数のファイルをまとめて一気に変換することです。

コマンドは「nkf」を使います。

nkfが対応しているエンコードタイプは以下です。

  • JIS(ISO-2022-JP)
  • Shift_JIS
  • EUC
  • Unicode (UTF-8, UTF-16):BOMあり/なし

nkfインストール

Linuxでnkfをインストールするにはパッケージインストールします。

CentOSの場合

$ sudo yum install nkf

Ubuntuの場合

$ sudo apt install nkf

Macでインストールする場合はHomebrewを使ってインストールします。

$ brew install nkf

Windowsの場合は「nkf.exe」をダウンロードして使います。

nkf.exe nkf32.dll Windows用(Vector)

Windows10でWSLを有効にしている場合は、導入しているLinuxに合わせた方法でインストール可能です。

nkf使い方

書式

nkf [オプション] [変換するファイル(入力)]

主なオプション

-jJISコードを出力する
-eEUCコードを出力する
-sShift_JISコードを出力する
-w, -w80UTF-8コードを出力する(BOMなし)
-w8UTF-8コードを出力する(BOMあり)
-w16, -w16B0UTF-16コードを出力する(ビッグエンディアン:BOMなし)
-w16BUTF-16コードを出力する(ビッグエンディアン:BOMあり)
-w16LUTF-16コードを出力する(リトルエンディアン:BOMあり)
-w16L0UTF-16コードを出力する(リトルエンディアン:BOMなし)
-g, –guess自動判別の結果を出力する(–guessを指定すると改行コード情報も表示)
-Lu, -d改行をLFにする(Unix系)
-Lw, -c改行をCRLFにする(Windows系)
-Lm改行をCRにする(macOS/OS Xより前のMac系)
–overwrite変換してファイルを上書きする

使用例

$ nkf -g sample.txt
UTF-8

指定したファイルのエンコードタイプを自動判別した結果が表示されます。

$ nkf -s sample.txt > sample-sjis.txt

指定したファイルをShift_JISに変換し、sample-sjis.txtへ出力しています。

$ nkf -g sample-sjis.txt
Shift_JIS

エンコードタイプを確認するとShift_JISとなっています。

$ nkf -s --overwrite sample.txt

指定したファイルをShift_JISに変換しファイルを上書きします。

$ nkf -g sample.txt

エンコードタイプを確認するとShift_JISとなっています。

フォルダ配下をサブフォルダもまとめて処理したいときは以下のようにします。

$ find . -type f -name "*.txt" -ok nkf -g {} \;
"nkf -g ./sample.txt"? y
Shift_JIS
"nkf -g ./test/sample.txt"? y
Shift_JIS

-okオプションで確認しながら実行できますが、一気に処理したい場合は-execオプションで実行します。

$ find . -type f -name "*.txt" -exec nkf -g {} \;
Shift_JIS
Shift_JIS

なので、一気にまとめて変換してファイルを上書きしたい場合は以下となります。

$ find . -type f -name "*.txt" -exec nkf -w -Lu --overwrite {} \;

「{} \;」の部分ですが、\の前はスペースは忘れずに入れてください。

上記のオプション以外にも半角カナ文字を全角カナに変換するものや、ひらがなで出力、カタカナで出力もできるのでコマンドのmanページで確認してみてください。