GAE/JRubyでmemcacheに日本語を格納すると文字化けする件
こんにちは。那由多屋の加藤です。
本日のエントリ「GAE/JRubyでハマったところ」に書いた「memcacheに日本語を格納すると文字化けする」件について、進展がありました。
というか、下記のページに、ずばり不具合の原因が書かれていました。データストアの文字化けが主題ですが、memcacheについても述べられています。
appengine-apis の memcache.rb を読み込むと Datastore に格納する日本語が文字化けする - milk1000cc
上記のページはappengine-apis 0.0.6についての内容ですが、memcacheについては0.0.12でも同様でした。下記のモンキーパッチで文字化けが無くなります。
module AppEngine class Memcache def memcache_value(obj) case obj when Fixnum java.lang.Long.new(obj) when Float java.lang.Double.new(obj) when TrueClass, FalseClass java.lang.Boolean.new(obj) when JavaProxy, Java::JavaObject obj else if obj.class == String # Convert plain strings to Java strings #obj.to_java_string # delete java.lang.String.new(obj) # add else bytes = Marshal.dump(obj).to_java_bytes java.util.ArrayList.new([MARSHAL_MARKER.to_java_string, bytes]) end end end end end