From: "NARUSE, Yui" Date: 2009-11-21T13:23:43+09:00 Subject: [ruby-dev:39748] Re: String::gsubにおけるinvalid byte sequenceの検出について 成瀬です。 TAKEGAWA Hiroshi wrote: > ruby 1.9で、あるUTF-8のStringに対してgsubを呼び出したところ、以下のエ > ラーになります。 > > $ cat sample/testdata.txt | ruby sample/gsub.rb > sample/gsub.rb:5:in `gsub': invalid byte sequence in UTF-8 (ArgumentError) > from sample/gsub.rb:5:in `
' > $ ruby --version > ruby 1.9.1p243 (2009-07-16 revision 24175) [x86_64-linux] > > テストデータの最後の一文字は 'a' なのですが、この最後の文字を削るだけで > エラーにならなくなります。スクリプトならびにテストデータを添付いたします。 > > 不正な文字を見つけることができず、また、 > ちらっと ruby のソースコードを見たのですが、原因がわからず、 > 報告させていただきました。 > > なにか回避方法があれば、ご教示いただけないでしょうか ? まず、結論から申しますと、これは Ruby 側のバグなので、修正します。 次に当面の回避策ですが、以下のように空文字を追加するコードを挟めばよいです。 (String#concat や String#<< では回避できない) ご不便おかけしますが、当面はこれでしのいでください。 #! /usr/local/bin/ruby # -*- coding: utf-8 -*- $stdin.set_encoding('UTF-8') str = $stdin.read p str.valid_encoding? #=> false str += "" p str.valid_encoding? #=> true -- NARUSE, Yui