DigitalDJ の文字化けを解消する
文字の化け具合を観察してみると Playlist 欄については utf-8 のデータを euc-jp として表示しようとしているらしい(ちなみに Debian なので LANG は ja_JP.eucJP)。それなら utf-8 で表示させてやればいいじゃん、ってことで
% LC_ALL=ja_JP.UTF-8 ddj
これは初っ端に試したんだけど特に変化はなく諦めていた。
が、いろいろ調べてみたところ Debian sarge はデフォルトでは ja_JP.UTF-8 のロカールは用意されていないってことらしい。状況が変わらなかったのはそーゆーことだったのね。
そこでまずは
# dpkg-reconfigure locales
で ja_JP.UTF-8 を作ってやる。更にフォント設定が必要なようで http://park15.wakwak.com/~unixlife/linux/de-utf8.html と http://www.geocities.jp/nikotuk/fedora-core.html を参考に /etc/gtk/gtkrc.ja.utf-8 を以下の内容で作成。
style "gtk-default-ja-utf8" { fontset = "-adobe-helvetica-medium-r-normal--14-100-100-100-p-76-iso8859-1,\ -ricoh-ms mincho-medium-r-normal--14-*-*-*-*-*-jisx0208.1983-0,\ -misc-fixed-medium-r-normal--14-*-*-*-*-*-jisx0208.1983-0,\ -*--14-130-75-75-c-*" } class "GtkWidget" style "gtk-default-ja-utf8"
これで LC_ALL=ja_JP.UTF-8 ddj で起動してやれば Playlist 欄の文字化けは解消される。
曲名がスクロールする部分と TV モードで起動した際の文字化けはフォントがハードコーディングされているのでソースの変更が必要だ。
--- src/ddj.c.orig 2003-11-01 10:01:02.000000000 +0900 +++ src/ddj.c 2006-01-15 18:08:40.717615824 +0900 @@ -3841,8 +3841,9 @@ style_wb=MakeStyle(&gdkwhite,&gdkblack,FALSE); style_LCD=MakeStyle(&gdkblack,color_LCD,FALSE); - style_LCD->font=gdk_font_load - ("-B&H-LucidaTypewriter-Medium-R-Normal-Sans-18-180-75-75-M-110-ISO8859-1"); + style_LCD->font=gdk_fontset_load + ("-B&H-LucidaTypewriter-Medium-R-Normal-Sans-18-180-75-75-M-110-ISO8859-1,\ + -misc-gothic-bold-r-normal--16-*-*-*-*-*-jisx0208.1983-0"); style_dark_grey=MakeStyle(&gdkwhite,color_dark_grey,TRUE); } @@ -4869,8 +4870,9 @@ gtk_widget_realize(window); - text_font=gdk_font_load - ("-Adobe-Helvetica-Medium-R-Normal--24-240-75-75-P-130-ISO8859-1"); + text_font=gdk_fontset_load + ("-Adobe-Helvetica-Medium-R-Normal--24-240-75-75-P-130-ISO8859-1,\ + -*-*-*-r-*-*-24-*-*-*-*-*-jisx0208.1983-0"); text_gc=MakePen(window,0xdddd,0xdddd,0xdddd); empty_image=Loadxpm(window,empty_xpm);
本当はハードコードせずに ~/.gtkrc あたりで変更できるようにしたかったんだけど、どうもうまくいかないのでかなりやっつけな修正。
とはいえこれで全ての部分の文字化けを解消することができてかなり嬉しい。日本語の曲名だと文字幅が異なるためスクロール表示がぎこちないが、落ちたり曲名が判んなかったりした今迄に比べればかわいいものだ。