2011年10月17日

[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

投稿者 xml-rpc : 2011年10月17日 15:36
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/106931
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。