それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

文字コード変換コマンドの nkfの使い方と実例をまとめました。

Linux文字コード変換コマンドする方法

LinuxはUTF8が普通になりました。EUC環境もまだまだ多く文字コード変換が必要になることもあります。

文字コード変換コマンド nkf

使い方
nkf オプション ファイル [> 出力ファイル]

よく使うオプション

オプション一覧
-e           : EUCコードを出力
-s           : Shift-JISコードを出力
-w           : UTF-8コードを出力(BOM無し)
-g           : 自動判別の結果を表示
--overwrite  : 引数のファイルに直接上書き

覚え方 -w / -W 大文字小文字はペア。
入力は大文字、出力は小文字。sjis-> utf8なら、入力-S 出力 -w で -Sw。入力は自動判別で十分で余り使うことがないので最後に書いた。

使用例

文字コードチェック

 nkf -g readme.txt
UTF8に変換
nkf -w --overwrite readme.txt
nkf -g readme.txt #結果を確認

元の文字コードは自動判別 。ファイルを書き換える。元のファイルを変換して上書きします。

そのほかの使用例

元ファイルを残すときは --overwriteをつけない

EUC-JPに変換

nkf -e --overwrite readme.txt
Shift-JIS(cp932)に文字コード変換
nkf -s --overwrite readme.txt
utf8 に文字コード変換
nkf -w --overwrite readme.txt
JISコード(ISO-2022-JP)に文字コード変換
nkf -j --overwrite readme.txt

iso-2022-jpはメールで使われます*1

複数ファイルをまとめて変換するサンプル

ディレクトリ内部のHTMLファイルをすべて文字コード変換する。

文字コード・改行を変換 →UTF-8/unix形式(LF)に変換

文字コードと改行をコードを合わせて変換できる。

$ nkf -w -Lu --overwrite *.html # *.htmlでまとめて変換
文字コードSJIS、改行→windows(CRLF)に変換
$ nkf -s -Lw --overwrite *.html

文字コードと同時に改行コードもウィンドウズに合わせる。

改行コード関連
-Lu          : unix改行形式(LF)に変換
-Lw          : windows改行形式(CRLF)に変換
-Lm          : macintosh改行形式(CR)に変換

よくある間違い

$ nkf -w readme.txt > readme.txt

上書きできません。入力ファイルと出力ファイルが同じなので、うまくいきません。中身が空っぽになる。

  • --overwriteオプション
  • 別名で保存してmvコマンドで移動する。

オプション一覧

-j(省略可能) : JISコード(ISO-2022-JP)を出力
-e           : EUCコードを出力
-s           : Shift-JISコードを出力
-w           : UTF-8コードを出力(BOM無し)
-Lu          : unix改行形式(LF)に変換
-Lw          : windows改行形式(CRLF)に変換
-Lm          : macintosh改行形式(CR)に変換
-g(--guess)  : 自動判別の結果を表示
--overwrite  : 引数のファイルに直接上書き
--version    : バージョン情報を表示

文字コードの判別がオカシイ時

入力されたエンコーディング判別が、間違っている時に、指定文字コードで強制的に読み込ませたい

```
nkf -S -w ## sjis として読み込んで utfで表示
```

大文字にすると、入力指定ができる。

-E           : EUCコードを入力
-S           : Shift-JISコードを入力
-W           : UTF-8コードを入力

同じことをPHP

RubyPerlのコマンドはあふれているので、敢えて、PHPで挑んでるもの。

PHPで文字コード変換コマンド作成

いままでは、このようなPHPRubyで処理していた。よく考えるとAptで専用プログラムインストールした方が早いよね。

2017-06-14

いくつか追記

2018-07-27

関連資料を追加

*1:GmailUTF-8対応なので最近はメールもUTF-8でOK