From: Hidetoshi NAGAI Date: 2008-01-11T18:44:35+09:00 Subject: [ruby-dev:33024] Re: Binary String 永井@知能.九工大です. From: Tanaka Akira Subject: [ruby-dev:33019] Re: Binary String Date: Fri, 11 Jan 2008 17:28:34 +0900 Message-ID: <87tzlku5oo.fsf@fsij.org> > > 現状,force_encoding('binary') などは受け付けてはくれますが, > > encoding は結局 ASCII-8BIT となってしまうので区別ができず役に立ちません. > > なんで ASCII-8BIT だと役に立たないのか理解できないんですが、 > どうしてなんでしょう? 前提条件の記述が足りませんでしたね.ごめんなさい. 「役に立たない」というのは, Ruby/Tk における encoding の自動変換処理での 判定に際してです ([ruby-dev:32550]). ASCII-8BIT はあまり信頼できる encoding ではないですよね? encoding を明確に指定していなければ簡単に ASCII-8BIT に なってしまいます. そのため,ASCII-8BIT とされている文字列の扱いは Ruby 1.8 の場合と変わりがないと考えています. Ruby/Tk では,不明確な場合の encoding を Ruby 1.8 なら $KCODE で, Ruby 1.9 なら default_external で推定し, UTF-8 に変換した後に Tcl/Tk 側に渡すようにします. # default_external も ASCII-8BIT なら, # Tcl/Tk の変換ルーチンに判断を任せます. しかしながら,Ruby と Tcl/Tk とのやり取りには 画像データなどの binary string も存在します. 当然,そうした文字列には変換をかけてはいけません. 現状の 1.9 では ASCII-8BIT が広く用いられてしまうため, 「推定による自動変換をすべき文字列」なのか 「変換してはならない文字列」なのかを encoding 情報を使って判断することができません. # 呼び出されるメソッド側で判断しろというのは # Ruby/Tk のライブラリでの記述の必要性が # 爆発的に増大する恐れが大きいため,ご勘弁ください. encoding 情報で判断できなければ,現在の Ruby 1.8 の場合のように, 独自に binary か否かの情報を付与してやらねばなりません. Ruby 1.9 ではせっかく文字列が encoding 情報を持つようになったのに, それを活用できずに独自に異なる手段で情報付与せざるを得ないなどという 無様なことになってしまいます. 与えられた文字列が独自形式で付与した情報を持つかどうかを 判断するという余計な手間も必要です. 「binary である」ことを明確に指示できる encoding がありさえすれば 余計な条件判断も必要とせずすっきりと簡単に解決できる問題です. ASCII-8BIT の replica ということにしておけば, 以前におっしゃられた binary string のテキスト処理という点でも 問題はないと思います. それでもダメでしょうか? -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp