差し当たって、nkf を用いてエンコーディングをシフトJISからユニコード(UTF8)に変更すればバックスラッシュ(\)がきちんと表示される。しかし、何故にShift JISでは、たとえフォントがバックスラッシュのグリフを持っていても円記号(¥)の方が表示されるのか、その理由を知りたい。少し検索したが、断片的な情報しか得られない。とりあえず、現時点で分かったことをメモ。
まず、バックスラッシュに関係するらしきロケール(locale)の話が次のページにある。
ja_JP.UTF-8 ロケールとフォントに関する注意事項 (日本語環境ユーザーズガイド) – Sun Microsystems
ページの一番下に、具体的な設定方法が少しだけある。どうやら、それぞれのロケール設定ファイルにおいて個別のコードブロックに対応するフォントファイルを指定できるようになっているようだ。バックスラッシュは、U+005C であり、アスキー7ビット領域にあるから、この領域に対するフォントグリフの設定を修正すれば良いのかもしれない。これはSun OSのケースなので、UbuntuというかGNU/Linuxの場合はファイルの位置から違うが、これはすぐに分かった。Ubuntu 8.04 (Hardy) の場合は、当該のファイル群は
/usr/share/X11/locale/
以下にある。しかし、具体的にどう修正すれば良いのか、全く分からない。
UTF8に関するロケールは、ja_JP.UTF-8 であり、XLC_LOCALE というファイルに記述がある。ASCII部分は次のようになっている。
# We leave the legacy encodings in for the moment,
# because we don't
# have that many ISO10646 fonts yet.
# fs0 class (7 bit ASCII)
fs0 {
charset {
name ISO8859-1:GL
}
font {
primary ISO8859-1:GL
vertical_rotate all
}
}
一方、Shift JIS のロケール ja.SJIS では次のようになっている。
# fs0 class (7 bit ASCII)
fs0 {
charset {
name ISO8859-1:GL
}
font {
primary ISO8859-1:GL
substitute JISX0201.1976-0:GL
vertical_rotate all
}
}
違いは、substitute JISX0201.1976-0:GL という一行だけのようだが、これは ISO8859-1のフォントグリフの代わりに JISX0201.1976-0 のフォントグリフを使うという意味だろうか。この行をコメントアウトして無効化すれば、UTFと同じ状態になるだろうか。勝手にファイルをいじって、不都合はないだろうか。うーん、やってみる勇気がいまひとつ出ないなあ。どうしたものか・・・。