[#48450] 1.8.7と1.9.2の挙動の違いについて — "Jun'ya Shimoda" <jun-shimo@...>

下田です。

13 messages 2011/10/09

[ruby-list:48476] Ruby 1.8でMarshalされたStringのEncodingについて

From: Masa <mhatakeyama@...>
Date: 2011-10-17 06:36:21 UTC
List: ruby-list #48476
スイスで働いている畠山です。

ただ今、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

In This Thread

Prev Next