• 締切済み

JSONエンコードの際の問題

PHP5.2.6とJavascriptの間で、JSONを用いてデータをやり取りしていますが、JSONエンコードの際に文字列がUnicodeエスケープ(\u3000のような形)されてしまい、データサイズが肥大化して困っています。 本来3バイトで良いところを6バイト消費していますので、全体としては約2倍弱のサイズのデータをやり取りすることとなってしまいます。 UTF-8のまま出力するライブラリ等はありませんでしょうか? php-jsonやJsphon等を試してみたのですが、いずれもUnicodeエスケープされたjson文字列が出力されてしまいました。 宜しくお願い致します。

みんなの回答

回答No.2

urlencodeでは同じく2バイト→6バイトなので解決になりませんね。 それでいくならUTF-7でしょうか。かなりマイナーなエンコーディングですが。

i_110
質問者

お礼

ありがとうございました。UTF-7についても少し調べてみます。

全文を見る
すると、全ての回答が全文表示されます。
noname#94983
noname#94983
回答No.1

JSONのエンコーディングについては、RFC 4627で規定されている。それによると、エンコーディングはUnicodeが望ましく、その場合は0..127範囲外の文字はユニコードエスケープする、とある。だから、一般的にはみんなそれにしたがって処理する形に実装されているんでないだろうか。 >UTF-8のまま出力するライブラリ等はありませんでしょうか? そのままといっても、まさか日本語をそのまま送るわけにはいかないから、何らかの形でASCII文字のデータにエンコードはしないといけない。どういうエンコードをして送ろうと考えているんだろうか。 例えばだが、一つの案として、事前に日本語をすべてurlencodeしたものをJSONオブジェクトにまとめて送信し、受け取った側で再びデコードして使う、というようなやり方はどうだろうか。ASCII文字に変換されていればユニコードエスケープはされないはずで、日本語をすべてユニコードエスケープよりはデータサイズは小さく収まると思うが。

i_110
質問者

お礼

追記です。 URLエンコードですとおそらくデータ量は1.5倍になります。 unicode escaped…6byte/1mb文字 URL encoded…3*3=9byte/1mb文字

i_110
質問者

補足

御回答ありがとうございます。 確かにRFC4627には「JSON は Unicode で表記すべきである。」との表記がありますね… ただ、参考までにGmailのソースを見てみましたが、JSON内にUTF-8で直接文字列が書き込まれています。 これは仕様を無視して転送量削減のためにJSON周りをHackしているという認識でよろしいでしょうか? また、それを実現するようなライブラリ等を御存知でしたら御教示ください。 宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • JSONでの日本語を出力する際のエンコードについて

    Javaでorg.json.simpleを使ってJSON形式のデータを出力しようとしています。 公開されているAPIなどをみると、日本語の部分は"\uxxxx"のように エスケープされているかと思うのですが、 下記の方法ではそのまま日本語で"あいうえお"と表示されてしまいます。 import org.json.simple.JSONObject; JSONObject obj = new JSONObject(); obj.put("name", "あいうえお"); System.out.print(obj.toString()); JSONで日本語を扱う場合は必ずエスケープしなくてはならないでしょうか? この場合はどのようにしたらエスケープできるでしょうか?

  • json_encode日本語表示/PHP5.2.5

    PHP5.2.5で、json_encodeした結果を日本語表示させたいのですが、どうすれば良いでしょうか? ・unicodeエスケープされた結果を、JSON形式のまま、元(Unicodeアンエスケープしていない状態)に戻すにはどうすれば良いでしょうか? ・あるいは、json_encodeを利用せず(?)に、ユーザー定義関数を利用する方法でもいけるのでしょうか?、 例えば、下記関数を5.2.5で動作させるには、どうすれば良いでしょうか? ▽PHPでUnicodeアンエスケープしたJSONを出力する関数 - オープンソースこねこね   http://kohkimakimoto.hatenablog.com/entry/2012/05/17/180738

    • ベストアンサー
    • PHP
  • エンコードについて

    phpでXMLやデータベースとの連携を実験中です。結果、連携はうまくいったのですが、文字のエンコードについて思うことがあります。連携によって引き出された情報はテキストとなってphp上に表示されますが、エンコードがどれもUTF-8となっています。その為文字化けが起こってしまい、右クリック>エンコード>Unicode(UTF-8)という手順でエンコード方法を変更する手間が発生してしまいます。 製作側の自分自身はもちろんのこと、これではユーザー側にも面倒な一手間をかけてしまうことになります。 なんとかこのエンコード方法を一般的なSJISにする方法はありませんでしょうか?

    • 締切済み
    • PHP
  • 文字エンコードについて

    文字エンコードについてなのですが、 コンピュータでは文字1つ1つに何バイトかの値が割り振られていて、 それを翻訳的なことをして表示していることがわかりました。 で、エンコードによって同じ文字でも内部の値が異なっているということもわかりました。 そこで質問なのですが、私はPHPを勉強しています。 それで文字列のエンコードを変更する関数があるのですが、それで文字列をUnicodeに変更したとします。 でも保存するときにANSIを選択した・・・これってどういうことなんでしょう? しかも、IE等のブラウザ上からも「表示」→「エンコード」→「Shift_JIS」と選択できます。 プログラムの上からのエンコーディング テキストエディタからのエンコーディング これはどちらが優先されているのでしょう。 エンコーディングについて詳しいサイトなどありましたらお願いします。

  • URLのエンコードについて

    JavaScriptで、JSON形式で渡ってきたデータを読んで、一部、文字列を結合して URLを作るんですが、その際のエンコードは encUrl= 'http://test.com/' + encodeURIComponent(xxx) + '/'; (xxxがjsonからきたデータ) で大丈夫でしょうか? たとえば.NETで言うところのHttpUtility.UrlEncodeと同じことがしたいのですが、 URIエンコードだとたぶん違いますよね…。 何を使えばUrlEncodeが出来るのでしょうか。

  • シフトJISでURLエンコード

    IEのJavaScriptのescapeで日本語をURLエンコードすると、UnicodeでURLエンコードしてしまいますが、シフトJISのままURLエンコードする方法はないのでしょうか? 文字列のシフトJISコードを取得する方法でも良いのですが・・・。 まったく、Unicodeなんて役に立たないものを無理矢理標準にしようとしないで欲しいナ!>MS

  • PHP+MySQL エンコード

    文字コードについて教えて下さい。 データベースMySQL の文字セット: UTF-8 Unicode (utf8)に固定。 htmlはSIFT-JISで表示。 フォームで受けとったデータをPHPからDBに書き込む場合 i18n_convert($data,"UTF-8", "SJIS"); をして書き込めば問題ないでしょうか? DBがEUCの場合は問題なかったのですが、UTF-8は初めて 扱うため、文字化けの不安があります。 いまいち、文字コード(バイト数の違いなど)が理解できておりません。 ご教授お願い致します。

    • 締切済み
    • PHP
  • JSONデータをjQueryにわたす際に文字化け

    MySQLからのデータをPHPでJSON形式に加工して、jQueryで表示させようしているのですが、 どうしても日本語だけ文字化けをしてしまい、エンコードを色々変えても文字化けしてしまい困っています。 どなたか助けていただけませんでしょうか? -文字化け結果- No:1 Title:¤Ç¤­¤¿¡ªÂçÀ®¸ù¡ª No:2 Title:¤³¤ì¤«¤é´èÄ¥¤ë¡ª phpにアクセスしても文字化けはいたしません。 jQueryからアクセスをすると完璧に文字化けをしてしまいます。 json.php (UTF-8) [ { no: "1", title: "できた!大成功!" }, { no: "2", title: "これから頑張る!" } ] index.html (UTF-8) <!DOCTYPE HTML> <html> <head> <meta charset="euc"> <title>jsonテスト</title> <link rel="stylesheet" type="text/css" href="style/desktop.css"> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript">google.load("jquery", "1.7.1");</script> <script type="text/javascript"> jQuery(function(){ $.getJSON("./json.php",function(data){ $('p','#demo').remove(); $('#demo').append('<ul/>'); $.each(data,function(i,items){ $("<li/>",{ text:'No:'+items.no+' Title:'+items.title }).appendTo('ul','#demo'); }); }); }); </script> </head> <body> <div> <div id="demo"> <h4>リスト</h4> <p></p> </div> </div> </body> </html>

  • C++でURLのエンコード

    文字列をShift-JisとUTF-8とEUCにエンコードしたいのですが、エンコードしてくれる関数とかC++でないですかね? やっぱり1バイトずつ調べて自分で変換するしかないのでしょうか? どなたかご教授お願いします。

  • C# asp.net HTMLタグのエスケープ文字のエンコード・デコード

    htmlタグをエスケープされた文字列を送受信するASPXをC#で作成しています。 .NETでは、エンコード・デコード用のライブラリが用意されていますか?ない場合は どのように実現しますか? ・参考(JavaScriptでHTMLをエスケープ文字へエンコード) http://htmlconverttext.naglly.com/