From: "とみたまさひろ" Date: 2008-01-16T23:15:11+09:00 Subject: [ruby-dev:33137] Re: String#valid_encoding? shoud be strict? とみたです。 On Tue, 15 Jan 2008 01:59:42 +0900 Masayoshi Takahashi wrote: > 【背景】 > 入力チェック等で、ある文字列があるエンコーディングの範囲内に > おさまっているか、厳格にチェックしたい場合があります。 > (おさまっていない場合は再入力をうながしたり、「?」に強制的に > 置換したりします)。 〜〜 > いずれにしても、最悪上記【背景】に書いたことを解決するのが > 目的です。それができるのなら、 String#valid_encoding? 以外の > 手段を使うのであっても構いません。 1.9 ではなくて 1.8.6 で試した結果ですし、処理系に依存するような気もする のですが、Iconv を使うのはどうでしょうか? $ ruby -riconv -e 'Iconv.iconv("CP932","CP932","\x87\x40")' $ ruby -riconv -e 'Iconv.iconv("SJIS","SJIS","\x87\x40")' -e:1:in `iconv': "\207@" (Iconv::IllegalSequence) from -e:1 例外を拾って適当に処理すれば、「?」に変換することもできると思います。 -- とみたまさひろ 3469 42CC 4D32 F53C AD98 65A5 8C37 FF09 69C1 6040