From: "NARUSE, Yui" Date: 2008-01-21T14:05:22+09:00 Subject: [ruby-dev:33237] Re: Binary String 成瀬です。 Hidetoshi NAGAI wrote: >> 以下の動作は了解なさっていますか? >> 1. s2.encoding はずっとUNDEFINED-8BIT を返す、のは実装上の話として、 >> 2. s1 (EUC-JP) + s2 は encoding が違うよエラー >> 3. ASCII-8BIT な文字列との結合・比較もエラー >> undefined という趣旨からして dummy フラグを付けてしまうと >> 4. US-ASCII な文字列との結合・比較もエラー >> undefined ってことは明らかになりますが、こんなもの本当に欲しいんですか? >> secure ruby みたいなものがあったらそこでは欲しそうですが。 > > いえ,「そこまでは実装していないだけ」のつもりでした. > encoding のチェックをする部分で UNDEFINED-8BIT に対しては > 対応付けられた replica 元 (って表現でいいのでしょうか?) を参照して > 処理するようにすればいいだろうというくらいに思ってましたが, > それは大変すぎるでしょうか? あ、若干勘違いしていたようです。 えーっとこれって、 * Marshal 経由 String の encoding は ASCII-8BIT にする. * Marshal から string を受け取ったら、適当に force_encoding で、  エンコーディングを設定。 とするだけでいい気がするんですが、なんでここまで大げさな機構が必要なので しょう。 > 例えば,Marshal データに特定の encoding を想定している場合は > 単純に default_undefined にその encoding を設定すればよいし, 受け取ってから force_encoding じゃだめですか。 > Marshal データの中に encoding 指定を含んでいる場合は, > 文字列操作の前にその encoding を default_undefined に > encoding をを設定すればよい. ASCII-8BIT で受け取って、適当にマッチさせるなりしてエンコーディングを知 り、その情報を使って force_encoding を使えばいいですよね。 # なお、ここでマッチさせたりするために ASCII 互換性が必要なので、 # ASCII 互換オクテット列 → ASCII-8BIT なのです これだと UNDEFINED-8BIT や Encoding.default_undefined はいりませんよね。 -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA