kakasiとnkf
【問題と解答】jus共催 第37回シェル芸bot生きてるかどうか分からないけどシェル芸bot向けシェル芸勉強会 | 上田ブログのQ7を読んでいていて、kakasi
は入力と出力の文字コードを指定できるのかーと思ったので書いた。
環境
nkf
による変換は必要?
kakasi
の利用例をみると下記のようにnkf
を前処理と後処理に使っているものが多いnkf
でEUC-JPに変換した後にkakasi
を通して平仮名に変換しUTF-8に戻して標準出力する場合はこんな感じ
$ echo 漢字 | nkf -e | kakasi -JH | nkf -w かんじ
$ echo 漢字 | kakasi -i utf-8 -JH かんじ
- 出力の文字コードを明示的に指定することもできる
$ echo 漢字 | kakasi -i utf-8 -o jis -JH $+$s$8
kakasi
のオプション
- では
nkf
を使う例が多い(気がする)のはなぜなのか?- オプションがあまり知られていない?
man
コマンドで詳細を確認するKANJI CODING CONVERSIONより
Unfortunately, several coding systems are used in Japan and JIS x0208 standard are changed at 1983. Therefore, KAKASI can automatically distinguish the coding system and coding revision and then use the same output coding system if the document does not include JIS x0201 KATAKANA. If JIS x0201 KATAKANA is included or you wish to change kanji coding system, you may use the next options.
上記によるとJIS x0201のカタカナ(JIS x0208から見た半角カナ)が含まれていない限りは自動的に文字コードの識別が可能とのこと
- しかし自分の環境ではあまり上手く識別されなかった
-
もしも指定されない場合には入力から判断しようとします。 KAKASIは入力をためこんで統計的に処理する方法がとれないので、 最初の漢字らしい文字をもって判断します。
自動的に識別した場合は入力の文字コードで出力する
- もちろん明示的にオプションで入出力の文字コードを指定することも可能