読者です 読者をやめる 読者になる 読者になる

なまずとUTF

スーパーエンジニア

春は異動の季節でございまして、僕ももうすぐ席替えになるようですが今のところ隣に座っているM本さんという人はスーパーエンジニアである。今日も僕が例によって、Ubuntu 上で動かしているとある Namazu の検索結果画面でどうやっても「Results」やら「Page」やらとなってしまうのに悶絶していたら、

「ああ、locale-gen ですよ」

と言って帰っていった。あんまり遅くなると奥さんに怒られちゃうのである。

ロケール

Ubuntu を普通にインストールすると、日本語の使用可能なロケールって ja_JP.UTF-8 だけですよね。

% locale -a
C
POSIX
en_AU.utf8
(略)
ja_JP.utf8

ですもん。

でもって Namazu はただいま開発中という 2.5 にならないとプログラム部分は UTF 対応しません。

ということはどうなるかと言うと、.namazurc にいくら LANG ja_JP.UTF-8 って書いても、日本語であることは分かってくれるので日本語用のテンプレートは呼んできてくれるものの、メッセージ部分は思いっきり無視であり、「Results」であり「Page」の刑に処されるのでした。

で、ロケールって本当によく分かってなかったんですけど、言われたとおり locale-gen の Manpage 見たら全て書いてあった。環境によって違うと思うけど、FILES の項に思いっきり

FILES
       /var/lib/locales/supported.d/*
              List all  locales  to  generate.   File  format  is  similar  to
              /usr/share/i18n/SUPPORTED.

である。つまり生成したいロケールがあったら /var/lib/locales/supported.d/ の中にファイルあるから、そこに書いときなさい。という暖かいお言葉でありましょう。しかも形式は、/usr/share/i18n/SUPPORTED に合わせておきなさい。ということも仰っておられるので、そうした。

% cat /usr/share/i18n/SUPPORTED | grep ja
ja_JP.EUC-JP EUC-JP
ja_JP.UTF-8 UTF-8

% sudo gedit /var/lib/locales/supported.d/ja

ファイル開けると ja_JP.UTF-8 UTF-8 だけがぽっつーんと書いてあるので、おもむろに ja_JP.EUC-JP EUC-JP 追加して、

% sudo locale-gen ja_JP.EUC-JP
% locale -a
C
POSIX
en_AU.utf8
(略)
ja_JP.eucjp
ja_JP.utf8

ヤッター。いそいそと .namazurc の LANG も変えたら、やりました!。「Results」が「検索結果」に!。いやー。この、外見からするととても不毛な作業。大体ですね、ウェブのコンテンツ置くようなサーバで UTF しか無いなんてありえないわけですけども、本番環境でもステージング環境でも問題ないのに、自分の制作環境だけちょっとだけダメ、というのは許しがたかった。半年持ち回した懸念払拭。うれしい。

ロケール錬金術

しかしあれですよね。上のだけ見ると、なんか無からロケールがぽろっと生まれてきたような雰囲気さえ漂いますけど、そんな等価交換の原則に反することはありえないわけですよね。一体どうなってるんだと思ったら、上の /usr/share/i18n/ にいろいろ置いてあって勉強になりました。locales/ja_JP には思いっきり文字の集合が詰まってて戦慄。でもって charmap/ の中にはエンコードが山ほどどっさり。

M本さんが言っていたとおり、既に文字集合エンコードも一揃持ってるんですね。当り前ですか。当たり前ですよね。全然知らなかった…。

Namazu と UTF

Namazu と UTF の話を検索すると、色々な場面での話が出てきてややこしい。整理するとどうやら、

  • UTF のファイル読めるのか
  • UTF のページから検索できるのか/UTF でキーワード飛ばして検索できるのか

というところみたいだ。「Results」はそのままでいいのか。いいよなあ。

UTF のファイル読めるのか

FAQ ページにある通り、お手元の nkf が対応していれば、nkfEUC-JP に変換して 以降に渡せるのでほぼ問題無いようでした。

UTF のページから検索して大丈夫か

同様にしてなんとかかんとかキーワードを EUC-JP に変換してから渡してあげられればいいので、間に CGI やら PHP やら噛ませてみてはいかがでしょうか。とインターネットに書いてありました。Jcode.pm などお使いになればあっというまです。僕にも一人で書けました!(会社で書いたのでソースは出せません!)