From: Hidetoshi NAGAI Date: 2008-01-16T10:20:50+09:00 Subject: [ruby-dev:33126] Re: Binary String 永井@知能.九工大です. From: Tanaka Akira Subject: [ruby-dev:33122] Re: Binary String Date: Tue, 15 Jan 2008 19:08:24 +0900 Message-ID: <87bq7ne6zq.fsf@fsij.org> > 具体的な問題の例はありませんか? > > たとえば、「LANG=xxx で ruby -e 'yyy' とすると foo になるの > だけれどもそこは bar になってもらわないと困る」というような。 すみません.現在手持ちのサンプルがありません. 昔,ascii テキストをそのまま渡していたら文字化け (改行コードの問題を含む) を生じたので 必ず toUTF8/fromUTF8 をかませるようにしたのですが, そうすると binary string をうまく扱えなくなったために Tk::BinaryString を導入したという経緯から来ています. > 私が述べた MIME の例についてはどうですか? ごめんなさい. >> 外部のシステムとの通信で良くあるのは MIME でしょう。たとえば、 >> メールや HTTP です。受け取ったデータの charset パラメータに >> 知らない名前が書いてあった時、永井さんのいう、文字列の >> encoding が未定義という状態になります。 >> (encoding は定義すると GC されずメモリを確保しっぱなしになる >> ため、その名前の dummy encoding は定義しないこととします) の部分を正しく読めていませんでした. 「『指定があるものは全部定義する』という方針じゃなかったっけ?」と 思ってました. このケースのように指定があるにも関わらず dummy が一切定義されることなく ASCII-8BIT となるようであれば, Tk での勝手な推測はまずいということになりそうですね. スクリプトを書く人は,charset パラメータをきちんと使えば encoding は適切に設定されると考えるでしょうから, 何も言われず期待していない未定義 (ASCII-8BIT) にされるようだと 代りの encoding の設定にまでは思い至らない可能性が高いでしょう. でも,それはそれでまずくないですか? 知らない charset (encoding) での処理が要求されたならば, 例外を上げるべきでしょう. そうした例外を無視して未定義のまま扱うのであれば, 何が起っても (Tk での推測誤りを含めて) 文句は言えないと思います. > 検索してみたところ http://wiki.tcl.tk/2616 に > > | schlenk 2005-06-27: The identity encoding is for testing > | purposes, it should not be used without very good reasons. > > という記述があります。この記述がどの程度信用できるのかはわか > らないのですが、identity が binary であるという規定も見つけ > られませんでした。tcl 8.5.0 と tk 8.5.0 の doc/ は探したので > すが、identity に関する記述はほとんど見当たらず、binary であ > るという記載はないように思います。 こちらは私の方が読んでいませんでした.お恥ずかしい. Tk::BinaryString を導入時点では,私も存在に気付いていませんでした. > identity が binary と規定されているというのはどこに書いてあ > るのでしょう? 明記はなかったですね. generic/tclEncoding.c での定義で, type.toUtfProc = BinaryProc; type.fromUtfProc = BinaryProc; となっていたので binary 相当と思い込んでました. 勝手な思い込みですみません. > どうなんでしょう。永井さんのいう「未定義」と「定義済」という > 言葉を正確に理解している気がしないのでよくわかりません。 「定義済」は,Ruby が知っているかどうかに関わらず, 何らかの情報を元に encoding が明示/指定されたものであり, 「未定義」は encoding の明示/指定が一切存在しないもの を指しているつもりでした. # で,Ruby の知らない encoding で「定義済」のものは # ASCII-8BIT ではない何らかの dummy encoding が付くのかなと... > おわかりだとは思うのですが、永井さんの期待する方向に私は前向 > きではありません。 > > 具体的な個々の問題について、(おそらくは永井さんの期待とは異 > なる方向で) 解決をはかることには前向きです。 指定があったけれども Ruby が知らなかった場合と 指定がない場合とを分けることができるようにするというのも 良くないとお考えですか? -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp