&pgid;
 
 - Ruby on Railsを使って構築しているシステムで、ブログパーツをJSONPを使って提供する、ということをやったのでそのメモです。 ⌣
 - [[JSONというgem:http://rubyforge.org/projects/json/]]があり、これを使ってハッシュなどを簡単にJSONにすることができるのでこれでやってみました。
 
 ** とりあえずJSONを出してみる [#x99cbfd3]
 - まずはJSONをgemでインストール
  $gem install json
 - ソース
  require "json"
  render_text({"name" => "志田 裕樹"}.to_json)
 - 結果
  {"name":"\u5fd7\u7530 \u88d5\u6a39"}
 
 ** この\uXXXXは? [#w6db4349]
 - [[ECMA-262 3rd Edition:http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/6_Source_Text.html]]や[[RFC 4627:http://www.7key.jp/rfc/rfc4627.html]]をみると、JavaScriptやJSONは本来はUnicodeか、JavaScript::UCS (( 参考)http://subtech.g.hatena.ne.jp/miyagawa/20060614/1150253107 )) を使って記述するべき、らしいです。
 - なので、gemのJSONはJavaScript::UCSを使って結果を返してくれたわけですね。
 - JavaScript::UCSは、BMPをuXXXXの形式にしたものらしく、BMPというのはつまりUCS-2という文字コードらしく、これはUnicodeファミリー(?)の一つらしい。なのでEUC-JPを\uXXXXのような形式に直してもだめだろう、と思います。
 
 #blikimore
 ** EUC-JPやShift_JISのページにJSONで受け取った内容を埋め込むには? [#z1b90ccb]
 - ブログパーツなので、埋め込まれるWebページは、日本だとEUC-JP, Shift_JIS, UTF-8などは最低でもおさえておく必要があります。
 - 普段JavaScriptのStringをHTMLの中にDOMで埋め込んだりする場合は、Stringの中にそのWebページの文字コードと同じ文字コードの文字列をいれておけば、うまく表示されます。([[ECMA-262 3rd Edition:http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/6_Source_Text.html]]によるとこれは本当はNGってことになると思うのですが)
 - なので、荒業ですが「JSON.support_unicode = false」で文字列のJavaScript::UCSへの変換を抑制して、EUC-JPなどの文字列をそのまま出してしまいます...
 -コード
  headers['Content-Type'] = "text/html;charset=euc-jp"
  require "json"
  require "kconv"
  JSON.support_unicode = false
  render_text({"name" => "志田 裕樹".kconv(Kconv::EUC, Kconv::UTF8)}.to_json)
 -結果
  {"name":"志田 裕樹"}
 これでEUC-JPのページに埋め込むことができました。
 -結論
 &color(red){JSONPの提供元はEUC-JPなどでサイトを作っているユーザーのために、文字列の文字コードがEUC-JPのバージョンも用意する必要がある...}; (もっといい方法なのかなぁ&sad;)
 
 tag: [[Ruby on Rails>tag/Ruby on Rails]], [[JavaScript>tag/JavaScript]], [[JSON>tag/JSON]], [[JSONP>tag/JSONP]]
 #blikifooter(志田)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

アークウェブのサービスやソリューションはこちら