3月 20, 2009

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 もバックスラッシュをきちんと表示してくれて気分が良い。