FreeBSD 5.x には各言語の UTF-8 ロケールが用意されていますが、 4.11-R の場合は、ports から別途インストールする必要があります。 /usr/pors/misc/utf8locale をインストールします。
ports のロケールデータベースをインストールしてテストしてみたところ、 scanf (sscanf) が誤動作しました。scanf 側のバグのような気もするのです が、SPACE に関するエントリをコメントアウトすればとりあえず実用の範囲で 動くようになるので、以下のようなパッチをあててからインストールしています。 /usr/ports/misc/utf8locale/files/patch-local-space というファイル名 で置いてからインストールしてください。
--- mklocale/la_LN.UTF-8.src~ Sat Dec 4 17:51:01 2004 +++ mklocale/la_LN.UTF-8.src Sat Dec 11 00:58:33 2004 @@ -70,7 +70,7 @@ LOWER 0x00aa 0x00b5 0x00ba 0x00df - 0x00f6 0x00f8 - 0x00ff PUNCT 0x00a1 - 0x00a9 0x00ab - 0x00b1 0x00b4 0x00b6 - 0x00b8 PUNCT 0x00bb 0x00bf 0x00d7 0x00f7 -SPACE 0x0085 0x00a0 +/* SPACE 0x0085 0x00a0 */ UPPER 0x00c0 - 0x00d6 0x00d8 - 0x00de BLANK 0x00a0 PRINT 0x00a0 - 0x00ff
# cd /usr/ports/misc/utf8locale # make install
でインストール後、 LANG や LC_CTYPE や LC_ALL に ja_JP.UTF-8 を指定します。
データベースの実体は /usr/local/share/locale 以下にインストールされま すが、/usr/share/locale にシンボリックリンクが張られこれが参照されます。 FreeBSD ベースシステムのアップグレードなどを行うと、/usr/share/locale 以下がクリアされてしまうので、make installworld したあとで
# cd /usr/ports/misc/utf8lcoale # make all deinstall reinstall
するのを忘れないようにしましょう。
$Date: 2005/07/13 11:03:25 $