From: Hidetoshi NAGAI Date: 2008-01-15T18:48:40+09:00 Subject: [ruby-dev:33121] Re: Binary String 永井@知能.九工大です. From: "NARUSE, Yui" Subject: [ruby-dev:33108] Re: Binary String Date: Tue, 15 Jan 2008 09:08:04 +0900 Message-ID: <478BF952.9080508@airemix.com> > > この変換処理の判定をすべてのケースについて記述しようとすると, > > コードの量が極度に増えてしまう危険性が大きく, > > 新しい Tcl/Tk の機能/属性に対してもその度に対応作業が > > 必要になる可能性も高まるため,避ける必要があります. > > ソースをざっと見ただけなので間違っているかもしれませんが、本当にそうです > か。tk_call_without_enc とかの binary 版を作れば解決したりしませんかね。 ダメだと思います. ソースをご覧になったのであればご承知とは思いますが, tk_call_without_enc は,ascii のみと分かっているか, あるいはすでに UTF-8 (または binary string) に変換済で それ以上の変換が必要がない場合に使えるものです. 結局はいずれかの段階で,Tk に渡すトークンごとに どのように変換するかを決めてやる必要があります. binary なのかを判断してやらねばなりません. で,***この件単独であれば***, ASCII-8BIT を binary として扱えというのなら それでなんとかなると思います. ですが, > 違います、magic comment の指定されていないスクリプトの文字列リテラルのエ > ンコーディングは ASCII-8BIT です。 というようなことがあるもので,どうにも受け入れがたく感じるのです. この状況は Ruby 1.8 の場合と同様に思えます. つまり,スクリプトの encoding は不明であるが, Tk はその環境での encoding の情報を持っているという状況です. Ruby 1.8 ではこの状況で,encoding 自動変換 + binary 明示という方法で, encoding 変換をわざわざ明示して書かずともうまく機能しています. Ruby 1.9 で,magic comment がなければ ASCII-8BIT になり binary == ASCII-8BIT とするのであるならば, これまで動いていた Ruby 1.8 のスクリプトに対しては 次のようになると思います. (1) これまでと同様に動くようにするため, Ruby 1.8 と同様に binary を明示する情報を付与する. せっかく encoding 情報を持つようになったのに, それを利用しないという方法です. でも,一般ユーザは ASCII-8BIT を binary として 使おうとするかもしれません. 似て異なる情報を持たせねばならないという 気持ちの悪い状況ではあります. (2) Ruby 1.8 で動いていた Ruby/Tk のソースは 文字化けしてしまうのというのを諦めてもらう. ソースの互換性を捨ててしまうという対応です. 動かしたければ,適切な magic comment の付与が必要です. このような互換性は捨ててしまうべきという意見もありそうですが, 私は,不可能でない限りは互換性を極力維持したいと 考える方ですので,心情としてはかなり辛い選択です. 不明時の encoding である ASCII-8BIT と区別できるような binary encoding が存在しさえすれば互換性維持ができると思ってます. そのために導入をお願いしてきたわけですが, どうしても binary encoding を加えるつもりはないということであれば, 非常に残念ですが上記の (2) を選択することにします. # さすがに (1) は将来に大きな禍根を残しそうですので. というわけで,本当に最後の質問です. binary encoding 導入,または ASCII-8BIT と UNKNOWN-8BIT の区別は どうしてもダメですか? -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp