schedule2019-01-25

【Linux/Mac】ファイルの文字コードをまとめてnkfコマンドで変換する方法

基本的に使う文字コードはUTF-8ですが、csvをExcelで確認するときなど文字化けしてしまいます。 そこで、文字コードをコマンドでの変換をできる方法をまとめました。

Linux, Macの環境が手元にあるので試してみます。

nfk (Network Kanji Filter) コマンド

日本語の文字コード変換するためのコマンドツールにはnkfを使います。

文字コードだけでなく改行コードも変換できます。 ちなみにzipコマンドで圧縮する時も改行コードを変換できます。詳しくはzipコマンドにあります。

対応するエンコード

  • JIS
  • Shift_JIS
  • EUC-JP
  • Unicode (UTF-8, UTF-16..)

参考:文字コードの考え方から理解するUnicodeとUTF-8の違い

環境

  • CentOS 6.9
  • Mac macOS High Sierra

上記の環境でのインストールと動作確認をします。

インストール

どの環境も初期状態ではコマンドがありませんでした。 それぞれの環境でインストールと使い方をまとめます。

-hはヘルプではなくひらがなカタカナ変換オプションです。 ヘルプはnkf --helpで確認すること。

Linux (CentOS 6.9)

$ sudo yum install nkf

バージョンを確認。

$ nkf --version
Network Kanji Filter Version 2.0.8 (2007-07-20) 
Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa),2000 S. Kono, COW
Copyright (C) 2002-2007 Kono, Furukawa, Naruse, mastodon

Version 2.1.2はこちらの方法でソースからコンパイルできます。 今回はVersion 2.0.8で進める。

Mac

homebrewを使ってnkfをインストールします。 とりあえずhomebrewをアップデートする。

$ brew update

$ brew -v
Homebrew 1.9.3

nkfのインストールとバージョン確認。 yumでインストールした時よりも新しいVersion 2.1.4でした。

$ brew install nkf
$ nkf -v
Network Kanji Filter Version 2.1.4 (2015-12-12)
Copyright (C) 1987, FUJITSU LTD. (I.Ichik

基本的な使い方

viで日本語のテキストtext.txtを作成した。

text.txt

あいうえお
かきくけこ
さしすせそ

文字コードを確認する

  • -g 文字コードを確認する
$ nkf -g text.txt 
UTF-8 (LF)

エンコード 改行文字

  • -s Shift-JISにエンコード
  • -c 改行コードをCRLFに変更
$ nkf -sc text.txt > text-jis.txt
$ nkf -g text-jis.txt 
Shift_JIS (CR)
  • -w UTF-8にエンコード
  • -d 改行コードをLFに変更
$ nkf -dw text-jis.txt > text-utf8.txt
$ nkf -g text-utf8.txt 
UTF-8
オプション 説明
-j JIS 7 bit (DEFAULT)
-s Shift JIS
-e EUC-JP
-w UTF-8
-w8 UTF-8
-w16 UTF-16
-c 改行コードをCRLFに変更
-d 改行コードをLFに変更

実はこんな書き方もできる。

オプション 説明
--windows Shift JIS
--mac Shift_JIS
--unix EUC-JP

--macはなぜかUTF-8ではない。

まとめて変換

テキストをまとめて**utf-8(LF)**へ変換する。上書きオプションをつけると可能。

  • --overwrite 上書きする。
$ nkf -dw --overwrite *.txt
$ nkf -g *.txt
text-jis.txt:UTF-8 (LF)
text-utf8.txt:UTF-8 (LF)
text.txt:UTF-8 (LF)

ひらがな <-> カタカナ

なんと、ひらがなとカタカナを変換できる。

$ cat text.txt
あいうえお
かきくけこ
さしすせそ

  • --katakana ひらがなをカタカナに変換
$ nkf -w --hiragana text.txt > text-k.txt
$ cat text-k.txt
アイウエオ
カキクケコ
サシスセソ

  • --katakana ひらがなをカタカナに変換
$ nkf -w --hiragana text-k.txt > text-h.txt
$ cat text-h.txt
あいうえお
かきくけこ
さしすせそ