JRuby on Rails/AppEngineの文字化け対策。
AppEngine上でのRailsアプリ開発に再挑戦中。appengine-jruby gemによって開発がぐっと楽になっていて、今度こそいけそうな気配がしてるんだけど、開発環境で文字化けが発生した。
この問題は既知のもので、いくつか対策は公表されてるんだけどどうしてもpropertyにText型を使った場合の文字化けがとれなかった。
原因は、AppEngine::Datastore::Text#to_javaの中でto_java_stringが使われているままになっていたことで、これを上書きすれば解決できた。こんな感じ。
# appengine-jrubyのDataMapperを使用する場合の文字化け対策用パッチ # Text対応版 by 殊海夕音 # original: http://d.hatena.ne.jp/yuum3/20090803/1249308751 module AppEngine module Datastore def Datastore.ruby_to_java(value) # :nodoc: if SPECIAL_RUBY_TYPES.include? value.class value.to_java else case value when Fixnum java.lang.Long.new(value) when Float java.lang.Double.new(value) when String #value.to_java_string # Thanks http://d.hatena.ne.jp/milk1000cc/20090802/1249218370 java.lang.String.new(value) else value end end end class Text < String def to_java #JavaDatastore::Text.new(self.to_java_string) JavaDatastore::Text.new(java.lang.String.new(self.to_s)) end def self.new_from_java(text) self.new(text.getValue) end end end end