• 締切済み

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

専門家に質問してみよう