Help us understand the problem. What is going on with this article?

macにnkfコマンドがないだと!?じゃあ入れよう!

More than 1 year has passed since last update.

nkfコマンドって何よ?

端的には『文字コード変換ツール』だ。
今回やりたかったのは改行コードの変更だったのでtrコマンドでよかったのだけど、nkfコマンドの素敵具合を思い出して、過去のshell資産などを使えるかなぁと実行しようとしたら、

bash: ./hogehoge.sh: /bin/sh^M: bad interpreter: No such file or directory

こんなエラーが出て悲しくなった。
悲しくなったので楽しいことをしようと考えた。
ただそれだけだ。
尚、macにtrコマンドは入ってる。


じゃあインストールだ!

わたくしは何を血迷ったかmacportでパッケージ管理してるので、

$ port search nkf
nkf @2.1.3_3 (textproc, japanese)
    Network Kanji code conversion Filter

p5-nkf @2.130.0 (perl, textproc, japanese)
    A perl extension module to use nkf.

p5.8-nkf @2.130.0 (perl, textproc, japanese)
    A perl extension module to use nkf.

p5.10-nkf @2.130.0 (perl, textproc, japanese)
    A perl extension module to use nkf.

p5.12-nkf @2.130.0 (perl, textproc, japanese)
    A perl extension module to use nkf.

p5.14-nkf @2.130.0 (perl, textproc, japanese)
    A perl extension module to use nkf.

p5.16-nkf @2.130.0 (perl, textproc, japanese)
    A perl extension module to use nkf.

Found 7 ports.
$ sudo port install nkf
--->  Fetching archive for nkf
--->  Attempting to fetch nkf-2.1.3_3.darwin_13.x86_64.tbz2 from http://jog.id.packages.macports.org/macports/packages/nkf
--->  Attempting to fetch nkf-2.1.3_3.darwin_13.x86_64.tbz2.rmd160 from http://jog.id.packages.macports.org/macports/packages/nkf
--->  Installing nkf @2.1.3_3
--->  Activating nkf @2.1.3_3
--->  Cleaning nkf
--->  Updating database of binaries: 100.0%
--->  Scanning binaries for linking errors: 100.0%
--->  No broken files found.

でOK

Homebrewの方は、
[Mac] nkf を Homebrew でインストール
ここらを参照。


nkfコマンドの使い方

ついでなので、自分用備忘録にコマンドの使い方をまとめておく。

まずはhelpを見る。
UNIXやLinux、macを触る際の基本だね。
大抵オプションは-h--helpだ。

$ nkf --help
Usage:  nkf -[flags] [--] [in file] .. [out file for -O flag]
 j/s/e/w  Specify output encoding ISO-2022-JP, Shift_JIS, EUC-JP
          UTF options is -w[8[0],{16,32}[{B,L}[0]]]
 J/S/E/W  Specify input encoding ISO-2022-JP, Shift_JIS, EUC-JP
          UTF option is -W[8,[16,32][B,L]]
 m[BQSN0] MIME decode [B:base64,Q:quoted,S:strict,N:nonstrict,0:no decode]
 M[BQ]    MIME encode [B:base64 Q:quoted]
 f/F      Folding: -f60 or -f or -f60-10 (fold margin 10) F preserve nl
 Z[0-4]   Default/0: Convert JISX0208 Alphabet to ASCII
          1: Kankaku to one space  2: to two spaces  3: HTML Entity
          4: JISX0208 Katakana to JISX0201 Katakana
 X,x      Convert Halfwidth Katakana to Fullwidth or preserve it
 O        Output to File (DEFAULT 'nkf.out')
 L[uwm]   Line mode u:LF w:CRLF m:CR (DEFAULT noconversion)
 --ic=<encoding>        Specify the input encoding
 --oc=<encoding>        Specify the output encoding
 --hiragana --katakana  Hiragana/Katakana Conversion
 --katakana-hiragana    Converts each other
 --{cap, url}-input     Convert hex after ':' or '%'
 --numchar-input        Convert Unicode Character Reference
 --fb-{skip, html, xml, perl, java, subchar}
                        Specify unassigned character's replacement
 --in-place[=SUF]       Overwrite original files
 --overwrite[=SUF]      Preserve timestamp of original files
 -g --guess             Guess the input code
 -v --version           Print the version
 --help/-V              Print this help / configuration
Network Kanji Filter Version 2.1.3 (2013-11-22) 
Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa).
Copyright (C) 1996-2013, The nkf Project.

文字コードチェック

テキストやスクリプトの文字コードを調べたい場合-gでOK

ex
$ nkf -g hoge.txt
ASCII

いやこの例だと意味ないじゃん。w
日本語の文字コードを調べる場合に使うので、UTF-8とかShift_JISとかEUC-JPという返り値が返ってくる。
昔からの癖でスクリプト類に2バイト文字使うの嫌いなんだよな……。

文字コード変換

とりあえず、Shift_JIS変換、EUC変換、JIS変換、UTF-8変換を記載しておく。
UTF-16は今のところ使ったことがないので省略。

SJISコードへ変換

Shift_JIS変換は、-s
上が元テキストが残る形、下は上書き。

ex
$ nkf -s hoge.txt > moga.txt
$ nkf -s --overwrite hoge.txt

EUCコードへ変換

EUC変換は、-e
上が元テキストが残る形、下は上書き。

ex
$ nkf -e hoge.txt > moga.txt
$ nkf -e --overwrite hoge.txt

JISコードへ変換

JIS変換は、-j
上が元テキストが残る形、下は上書き。

ex
$ nkf -j hoge.txt > moga.txt
$ nkf -j --overwrite hoge.txt

UTF-8(BOMなし)コードへ変換

UTF-8(BOMなし)変換は、-w
最近、Java周りでxmlファイルにBOMがついてることがあり、その場合エラーが発生するので、この変換で取り去るといいだろう。
上が元テキストが残る形、下は上書き。

ex
$ nkf -w hoge.txt > moga.txt
$ nkf -w --overwrite hoge.txt

UTF-8(BOMあり)コードへ変換

UTF-8(BOMあり)変換は、-w8
上が元テキストが残る形、下は上書き。

ex
$ nkf -w8 hoge.txt > moga.txt
$ nkf -w8 --overwrite hoge.txt

改行コード変換

改行コードはWindowsがCR+LF、Unix/Linux/macがLFとなる。ちなみに昔のmacはCRで変換の際はWindowsと同様と考えてもらってかまわない。

Windows > Unix/Linux/mac

上が元テキストが残る形、下は上書き。個人的には元テキストを残した形で後で消すなりなんなりした方がいいと思うが、事前に元テキストのコピーを変換したい場合は--overwriteでもよい。

ex
$ nkf -Lu win.txt > mac.txt
$ nkf -Lu --overwrite hoge.txt 

Unix/Linux/mac > Windows

上が元テキストが残る形、下は上書き。

ex
$ nkf -Lw mac.txt > win.txt
$ nkf -Lw --overwrite hoge.txt

改行変換はtrコマンドでも出来る。

Windows > Unix/Linux/mac

ex
$ tr -d \\r <win.txt > mac.txt

改行変換は、nkfでもtrでもsedでもawkでもperlでもrubyでもpythonでもphpでも出来る。
vimとかemacsでも。

改行コード変換については、ここが詳しかった。
ちょいと古いけど。

kou_bacchus
属性:闇、野良SE。
http://www.kou16.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした