[Linux] 文字コードを変換する

Linux上で文字コードを変換するコマンドといえば、nkficonvの2つ。よく忘れるので備忘録がてらオプションと使い方をメモしておきます。

nkf

実行例1 - 出力する文字コードを指定

入力側の文字コードは自動で判定してくれますので、出力側の文字コードをオプションで指定します。

$ nkf -s foo.txt > foo_sjis.txt
$ cat foo.txt | nkf -s > foo_sjis.txt
オプション 文字コード
-j ISO-2022-JP
-s Shift_JIS
-e EUC-JP
-w8 UTF-8 (BOMあり)
-w80 UTF-8 (BOMなし)
-w16 UTF-16 BE (BOMあり)
-w16B 同上
-w16L UTF-16 LE (BOMあり)

実行例2 - 入力する文字コードも指定

自動判定がうまくいかない場合、オプションで指定することも可能です。出力時のオプションを大文字にしてやるだけです。

$ nkf -E -s foo.txt > foo_sjis.txt
$ cat foo.txt | nkf -E -s > foo_sjis.txt
オプション 文字コード
-J ISO-2022-JP
-S Shift_JIS
-E EUC-JP
-W8 UTF-8
-w16 UTF-16 BE
-w16B 同上
-w16L UTF-16 LE

iconv

実行例

以下でUTF8のファイルを、シフトJISで出力します。

$ iconv -f UTF8 -t SJIS foo.txt > sjis.txt

対応している文字コード

-lオプションで一覧を表示できます。

$ iconv -l

iconv -l | wc -lすると141行ほど返ってきますので、対応している種類で言えばnkfを圧倒しますね。

例えば以下のような文字コードを指定することができます。

  • UTF-8 UTF8
  • UTF-16
  • UTF-16BE
  • UTF-16LE
  • UTF-32
  • UTF-32BE
  • UTF-32LE
  • JISX0201-1976 JIS_X0201 X0201 CSHALFWIDTHKATAKANA
  • EUC-JP EUCJP EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE CSEUCPKDFMTJAPANESE
  • MS_KANJI SHIFT-JIS SHIFT_JIS SJIS CSSHIFTJIS
  • ISO-2022-JP CSISO2022JP
  • ISO-2022-JP-1
  • ISO-2022-JP-2 CSISO2022JP2
  • EUC-JISX0213
  • SHIFT_JISX0213

その他

nkfの開発者

余談ですが、nkfはもともと富士通の方が作成されていたんですね。知らんかったw

$ nkf -v    
Network Kanji Filter Version 2.1.4 (2015-12-12) 
Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa).
Copyright (C) 1996-2015, The nkf Project.

関連

blog.katsubemakito.net