From: Tanaka Akira Date: 2008-02-08T13:48:28+09:00 Subject: [ruby-dev:33653] Iconv::IllegalSequence#failed Iconv::IllegalSequence#failed が失敗した場所からの String を 返さないことがあります。 % ./ruby -riconv -e 'ic = Iconv.new("euc-jp", "euc-jp"); s = "\xa4\xa2\xa4\xa4\x8fabc".force_encoding("euc-jp") p s begin ic.iconv(s) rescue Iconv::IllegalSequence p $!.success p $!.failed end ' "あい\x8Fabc" "\xA4\xA2\xA4\xA4" "bc" (success が EUC-JP になってないのは [ruby-dev:33221] で書い たのでおいておくとして) この場合 \x8F で失敗しているので、 failed は "\x8Fabc" になってほしいところですが、"\x8Fa" が抜 けて、"bc" だけが返ってきます。 また、以下のようにすると、failed が nil を返します。 % ./ruby -riconv -e 'ic = Iconv.new("euc-jp", "euc-jp"); s = "\xa4\xa2\xa4\xa4\xa4\xa6\xa4\xa8\xa4\xaa\x8fabc".force_encoding("euc-jp") p s begin ic.iconv(s) rescue Iconv::IllegalSequence p $!.success p $!.failed end ' "あいうえお\x8Fabc" "\xA4\xA2\xA4\xA4\xA4\xA6\xA4\xA8\xA4\xAA" nil 推測としては、バイト単位と文字単位を取り違えてるような? -- [田中 哲][たなか あきら][Tanaka Akira]