From: Tanaka Akira Date: 2008-07-31T15:30:23+09:00 Subject: [ruby-dev:35704] str.encode("utf-32le", :invalid=>:replace) UTF-8 として正しくないものを String#encode で UTF-32LE に変 換するときに :invalid=>:replace を指定したとき、UTF-32LE と して正しくないものが返ってきます。 % ./ruby -ve ' s = "\x80".force_encoding("utf-8").encode("utf-32le", :invalid=>:replace) p s.encoding p s.valid_encoding? p s.bytesize p s.force_encoding("ascii-8bit") p s.force_encoding("utf-32le").valid_encoding?' ruby 1.9.0 (2008-07-31 revision 18291) [i686-linux] # true 2 "\x00?" false "\x00?" は 2byte なので、UTF-32LE としては正しくありません。 あと、ついでにいうと、正しくないにもかかわらず valid_encoding? で true が返ってきます。 -- [田中 哲][たなか あきら][Tanaka Akira]