From: Hidetoshi NAGAI Date: 2008-01-12T00:47:43+09:00 Subject: [ruby-dev:33041] Re: Binary String 永井@知能.九工大です. From: Tanaka Akira Subject: [ruby-dev:33027] Re: Binary String Date: Fri, 11 Jan 2008 19:10:52 +0900 Message-ID: <87k5mgad01.fsf@fsij.org> > 基本方針として、ASCII でない文字列を ASCII-8BIT で扱うのは例 > 外的な状況になるべきです。 > > マルチバイト文字を含むものを ASCII-8BIT で扱うと、文字単位の > 操作ができませんから、String のメソッドの動作にも支障を来し > ます。encoding を適切に付けないことの問題は tk だけの問題で > はありません。 > > ですから、可能な限り適切な encoding を指定すべきです。 であるなら,byte sequence ではない String には ASCII-8BIT が付与されてはならないのではないでしょうか. その場合,未知のものに Ruby が勝手に付与するなら, UNKNOWN-8BIT などにしてもらわないと困ります. Ruby によって ASCII-8BIT が勝手に付与される可能性がある限り, ASCII-8BIT を信頼して使うことはできません. 言い換えると,Ruby/Tk では,現状で ASCII-8BIT となっている場合は 上で言う UNKNOWN-8BIT と考えて扱おうとしています. > ちなみに、encoding や alias を増やす必要はあると思っています。 > (ANSI_X3.4-1968 とか) 不足が存在しなくなれば ASCII-8BIT が勝手に付与されることはないのなら それはそれで「あり」なのかもしれませんが, それが不足している間はどうなるのでしょうか? 今後新たな encoding が増加することはないという保証はあるのでしょうか? あるいは,増加した場合は遅滞なく encoding が追加されるなどと 保証することができるのでしょうか? > 外から文字列として読み込んだものは default_external になって > いるはずです。 > > にもかかわらずそうなっていないのはバイナリでしょう。 現状では ------------------------------------------------------------------------ $ echo $LANG ja_JP.eucJP $ ruby19 -v ruby 1.9.0 (2008-01-10 revision 0) [i686-linux] $ ruby19 -e 'a = "aaa"; e = "漢字"; p [a.encoding, e.encoding, Encoding.default_external]' [#, #, #] ------------------------------------------------------------------------ ということになりますが,これは現状が間違っているということでしょうか? > ASCII-8BIT を非ASCII文字列に広く用るのは意図されていません。 > 広く用いられてしまうことを避ける方向へいくのは不可能だと考え > ていますか? Ruby が勝手に付与する可能性がある限りは不可能だと考えています. > ASCII-8BIT を使ってください。 残念ながら,上記の現状を見る限り,信頼することができません. -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp