From: Hidetoshi NAGAI Date: 2010-03-17T12:35:15+09:00 Subject: [ruby-list:46921] Re: ruby/tkの文字コード 永井@知能.九工大です. From: Masutoyo Kawamura Subject: [ruby-list:46915] ruby/tkの文字コード Date: Tue, 16 Mar 2010 18:09:11 +0900 Message-ID: <20100316180912.3b777f2a.m-kwmr@po.hyper-tsukumi.jp> > これまで、Perl/Tkを使ってきましたが、Ruby/Tkを始めようと思っています。 > Vine Linuxで作業しますが、Windows でも動作するようにしたいと > 思っています。 > そこで教えて頂きたいのですが、スクリプトを書く文字コードは、 > どれが望ましいのでしょうか。 > utf-8, euc, shift-jis > よろしくお願いします。 結論としては「どれでもご自由に」なのですが, 少し解説が必要かもしれません. Ruby/Tk は "require 'tk'" の実行時の encoding 情報に基づいて, どのように encoding の変換を行うかを決めています. 参考に Ruby ソースの ext/tk/sample/demo-jp/ ディレクトリ下を見てください. ここにあるスクリプトはすべて euc-jp で書かれていますが, GUI 上に限れば windows 上でもそのまま問題なく扱えていると思います. GUI での文字化けはなく,entry widget 等への日本語入力なども OK です. これは,ext/tk/sample/demo-jp/ の頭でスクリプトの encoding を euc-jp に設定しているためで,Ruby/Tk はこれを根拠に, Tk <-> Ruby の際に文字列の encoding を 自動的に euc-jp との間で変換しています. つまり,スクリプトの文字コードが何であっても, require 'tk' の際に $KCODE (ruby 1.8 の場合.1.9 ならマジックコメント) などでスクリプトの文字コードが何かを Ruby に教えておくか, require 'tk' の後に "Tk.encoding = 'euc-jp'" などとして encoding を指定するかをしておきさえすれば,** GUI 上は ** 問題なしです. そうした意味では「どれでもご自由に」となります. 「 GUI 上は」と強調しているのは, コンソールへの出力など Ruby 外への出力には面倒があるためです. コンソールへの出力をすべて Tcl/Tk 側で行う場合ならともかく, Ruby 側では単純に出力するとスクリプトの encoding となってしまいます. スクリプトとコンソールとで encoding が違っていれば当然文字化けします. ですが,この点は Ruby/Tk 自身の責任範囲ではないですよね.(^_^) -- 永井 秀利 (nagai@ai.kyutech.ac.jp) 九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門