初めて文字コードで

先日導入した emath のテストのために、tDB 氏の書かれたドキュメントをいくつか LaTeX でタイプセットしていたのだが、そのままでは変換できないものがいくつかあった。

TeX Live の platex は、iconvでプリプロセスするような仕様になっているので、.tex ファイルの文字コードが何であっても、通常は問題が生じないはずである。事実、僕の場合も、JIS と UTF-8 が混在する環境で使っているのだが、今迄これでトラブったことはない。しかーし、今回のファイルはいわゆるシフト JIS だったので、初めてこれを疑ったのだった。

昔から、テキストファイルを複数の環境で扱う人間にとって、この文字コードの問題は悩みのタネだった。伝統的に、UNIX 等のシステム上では EUC-jp か JIS を使うことが多かったわけだけど、パソコンという代物は皆シフト JIS が一般的であった。昔は、自宅のパソコンを常時接続環境で使っている人などまず存在しなかったので、家と学校 / 職場で作業を行う場合、これらの間で文字コードを変換することは不可避だった。

それだけならまだよかったのだけど、これに加えて、UNIX 系のシステムと Microsoft 系のシステムでは、テキストファイルにおける改行を示すコードが違っていた。前者は LF、後者は CR + LF というコードで改行を示していたのだけど、丁度僕が大学に入る頃から出てきた Mac では、困ったことにこれを CR で表わしていた。つまり、

文字コード 改行コード
UNIX EUC-jp / JIS LF
Microsoft Shift-JIS CR + LF
Mac(〜 OS9) Shift-JIS CR
……という、ややこしい状況になっていたわけだ。

こういう状況で、僕等が便利に使っていたのが QKC というソフトだった。この QKC は、JIS・EUC-jp・シフト JIS の3種類の文字コードの間での相互変換、そして LF・CR+LF・CR の3種類の改行コードの間での相互変換を簡単に行うことができる。しかも、ワイルドカードで複数のファイルを指定することができるので、とにかく便利だった。

今も僕は /usr/local/bin/ にこの QKC を入れているのだが、今回のような事態では、QKC だけでは用が足りない。というのも、QKC は UTF-8 を扱うことができないのである。この辺の話はこの blog でも『今更漢字コード』(on 2011/01/24)で触れているのだが、ここで言及している NKC という ruby スクリプトはもう入手できなくなっている。公開元サイトがドメインごと消失してしまったのだ。

ということで、とりあえず頭の体操である。先の LF とか CR とかいうのをエスケープシーケンスで書くと、前者が \n で後者は \r である。だから、文字コードが単一であるならば、この2者を置換してやればいいということになる。UNIX には tr という便利なコマンドがあるので、たとえば LF を CR に置換するならば、

$ tr \\n \\r < foo.txt > bar.txt
とかしてやればいい。CR+LF を LF にするのなら、-d オプションを使って、
$ tr -d \\r < foo.txt > bar.txt
で出来そうだ。逆だったら……まあ、僕はこういうときは sed を使うのだけど、
sed -e 's/$/\r/' foo.txt > bar.txt
……こんな感じか。

しかし、tr を使うにせよ、sed を使うにせよ、ワイルドカードで一発処理、というわけにはいかないので、スクリプトを書くことになる。それが面倒なことがあるので、僕はこの手の処理をするときには、改行コードの変換を QKC で行い、文字コードの変換を NKF で行うことが多い。たとえば、

nkf -w --in-place ./*.txt
のように --in-place オプションを使えば、NKF でもワイルドカードを使った一発処理が可能になる。実は今回は、Microsoft のシステム上で作られたと思しきファイルを、まず QKC で改行コードを変え、次に NKF で文字コードを UTF-8 に変えた。このご時世、こんなことでバタバタやっているのは僕位なのかもしれないけれど、メモ代わりに、そして時代の記録として、これを書いておくことにする。

2011/08/14(Sun) 18:12:01 | コンピュータ&インターネット
Tittle: Name:

Profile

T.T.Ueda
Tamotsu Thomas UEDA

茨城県水戸市生まれ。

横山大観がかつて学んだ小学校から、旧水戸城址にある中学、高校と進学。この頃から音楽を趣味とするようになる。大学は、学部→修士→博士の各課程に在籍し、某省傘下の研究所に就職、その2ヵ月後に学位を授与される(こういう経緯ですが最終学歴は博士課程「修了」です)。職場の隣の小学校で起こった惨劇は未だに心に深く傷を残している。

その後某自動車関連会社の研究法人で国の研究プロジェクトに参画、プロジェクト終了後は数年の彷徨を経て、某所で教育関連業務に従事。

New Entries

Comment

Categories

Archives(902)

Link

Search

Free

e-mail address:
e-mail address