From: Masa Date: 2011-10-17T15:36:21+09:00 Subject: [ruby-list:48476] Ruby 1.8でMarshalされたStringのEncodingについて スイスで働いている畠山です。 ただ今、Ruby1.8からRuby1.9へのアプリケーション移行中なのですが、予想通りEncodingのIncompatibleエラーが多発しています。 一つ問題点があり、ご相談したく投稿いたします。 現行システムではMarshal化されたオブジェクトをデータベースに保存しています。Ruby 1.8でMarshalしたStringデータをRuby1.9でloadするとEncodingの情報はASCII-8BITになると思うのですが、これをUTF-8にどう変換したらいいものかと悩んでいます。loadしたあとに一つ一つforce_encodingすればたしかにUTF-8にでき問題ないのですが、問題はString情報がいろいろなオブジェクトに点在していること、Marshalされた単位が独自クラスごとなので、load時に一つ一つのオブジェクトの各変数がStringかどうかを判定するのは面倒なこと、などです。 Encoding.default_externalやdefault_internalも試してみたもののMarshalデータに対してはうまくいかないようです。 いまはすべてのオブジェクトを再帰的に走査してすべてのStringのEncodingをUTF-8に変換するスクリプトを作ろうとしているところですが、他に何か良いアイデアがあればお願いします。 畠山 ywesee GmbH