&tag(JSON); *目次 [#kb8cdf46] #contents *参考情報 [#ba347d3f] -[[教えて!Ziddyちゃん - JSONエンコードの際の問題:http://ziddy.japan.zdnet.com/qa5242653.html]] *基本 [#se9407b6] **UNICODEエスケープ [#oa60adb5] -JSONに含まれる日本語文字列はUTF-8。 -UTF-8を「UNICODEエスケープ」(\u672c\u65e5\u306f\u6674\u5929\u306a\u308aのような文字列)してやりとりするのが正しい? -しかしRuby用のJSONライブラリでは生のUTF-8が使われているようだが… -[[JavascriptのUnicodeをescape/unescape - OVERT MEMO:http://d.hatena.ne.jp/cesar/20070401/p1]] *POSTする [#ne510f76] **Rubyを使ってPOSTする [#j0097d35] -[[Twitterのuser_timelineから新着発言を取得して別サーバにPOST - m-kawato@hatena_diary:http://d.hatena.ne.jp/m-kawato/20100419/1271691947]] *PHP [#qdf1ab6a] [[PHPでJSON - Do You PHP?:http://www.doyouphp.jp/sample/sample_xml_json.shtml]]よりphp5.3の場合は次のようにすればいいらしい。文字化けしたので最初のheader行を追加した。 #pre{{ <?php header("Content-Type: text/html; charset=UTF-8"); ?> <?php echo '<pre>'; $val = array("abc" => 12, "foo" => "bar", "bool0" => false, "bool1" => true, "arr" => array(1, 2, 3, null, 5), "float" => 1.2345, "hoge" => mb_convert_encoding('ほげほげ', 'utf-8', mb_internal_encoding()) ); $output = json_encode($val); echo 'encoded=' . $output . '<br>'; $decoded = json_decode($output); var_dump($decoded); echo mb_convert_encoding($decoded->hoge, mb_internal_encoding(), 'utf-8'); ?> </pre> <hr> <?php show_source($_SERVER['SCRIPT_FILENAME']); ?> }} 次のように出力される。 #pre{{ encoded={"abc":12,"foo":"bar","bool0":false,"bool1":true,"arr":[1,2,3,null,5],"float":1.2345,"hoge":"\u307b\u3052\u307b\u3052"} object(stdClass)#1 (7) { ["abc"]=> int(12) ["foo"]=> string(3) "bar" ["bool0"]=> bool(false) ["bool1"]=> bool(true) ["arr"]=> array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> NULL [4]=> int(5) } ["float"]=> float(1.2345) ["hoge"]=> string(12) "ほげほげ" } ほげほげ }}