nkfを用いて文字コードを変換する
Ubuntuの(というより Gnomeの?)標準テキストエディター gedit でShift_JISでエンコードされた文書を開くと、何故かバックスラッシュ(\)が円マーク(¥)のグリフで表示される。フォントの問題かと思って、Andale Mono などいくつかの欧文等幅フォントで表示させたが、結果は同じ。Emacsで開けば、きちんとバックスラッシュで表示されるのだが。
とある理由で gedit から印刷させたいのだが、バックスラッシュがきちんと表示されないのでは困る。gedit でエンコードを utf-8 にして保存してみたのだが、驚くなかれ、今度は Emacs でも円マーク(¥)で表示されてしまう始末だ 😯 。一体どうなっているの〜。うーむ・・・想像だがUbuntuのロケールがutfの日本語だと、良かれと要らぬサービスをしているのだろう。困ったもんだ。
仕方ないので、nkf を使って文字コードをutf-8に変換した。検索して見つけた次のページを参考にした。
まさおのブログ: ファイルの文字コードを一括変換 (find, nkf, xargs)
nkf単独だと1個ずつ変換することになるので、パイプの機能を利用して、ディレクトリーにあるファイル全部を変換する。
$ find . -type f | xargs -n 20 nkf -w -Lu --overwrite
上の例だと、カレントディレクトリーにおいて、ファイルを見つけて(find)、それをパイプラインで nkf に送り込む。オプションの意味は、-w がutf にする、-Lu が行末コードをUNIXタイプにする、などなど。
ということで、これでファイルの文字コード変換はばっちりだ。utf-8のエンコードだと、gedit もバックスラッシュをきちんと表示してくれて気分が良い。