Sinatra on Google App Engineで日本語文字化け問題を解決
今回解決したのは以下二点。
1)appengine-jrubyでdatastoreにputしたら文字化け!
2)POSTされた日本語文字列をsplitで一文字ずつ分割しようとしたら正しく分けてくれない!
datastoreへのputで日本語文字化け問題を解決
とりあえずどっかにあったサンプルのguestbook.rbにパッチを追加しました。これで無事解決です。
require 'rubygems' require 'sinatra' require 'haml' require 'dm-core' # 以下がパッチです module AppEngine module Datastore def Datastore.ruby_to_java(value) 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 java.lang.String.new(value) else value end end end end end #あとはサンプル通り DataMapper.setup(:default, "appengine://auto") class Shout include DataMapper::Resource property :id, Serial property :message, Text end set :haml, {:format => :html5, :escape_html => true} get '/' do @shouts = Shout.all haml :index end post '/' do shout = Shout.create(:message => params[:message]) redirect '/' end
appengine上で日本語を正しくsplit
もうひとつやりたかったことは日本語の分割。普通はString.split(//)で分割するが、そのままやるとわけわからん文字になる。文字コードをちゃんと指定しないといけない。というわけで以下のコードを追加する。
require 'jcode' $KCODE = 'UTF-8' ... #例えばPOSTされた文字列を分割して表示 post '/split' do str = params[:messange] str.split(//).join(',') # => もし文字列が「日本語」なら「日」「本」「語」と分割される end
てかむっちゃ基本のキや・・・orz
こんなことに躓いていて @shin1ogawa さんに声をかけてもらったり。いやはやお恥ずかしい限りです。でもまあ、無事解決したので、試しに転置インデックスで全文検索が出来るかどうか、ちょっくらやってみたいと思います。