b = ("测试程序。");"/> b = ("测试程序。");">

Heim >Backend-Entwicklung >PHP-Tutorial >json编码中文如何会乱码

json编码中文如何会乱码

WBOY
WBOYOriginal
2016-06-13 12:05:041160Durchsuche

json编码中文怎么会乱码
以下代码编码后怎么是\u的乱码,之前用JAVA编码JSON后都是正常的中文呀,请问这是怎么回事,该怎么解决。

<br />		$test = new stdClass();<br />		$test->a = ("中文名称");<br />		$test->b = ("测试程序。");<br />		echo json_encode($test, JSON_FORCE_OBJECT);<br />


以上代码编码结果为:
{"a":"\u4e2d\u6587\u540d\u79f0","b":"\u6d4b\u8bd5\u7a0b\u5e8f\u3002"}
------解决方案--------------------
echo urldecode ( json_encode($test, JSON_FORCE_OBJECT) ); 
添加urldecode 就ok了
------解决方案--------------------
那不是乱码,中文字符json_encode 之后是那样的。
------解决方案--------------------
\u 可不是乱码,人家是为了防止乱码转了unicode码而已
------解决方案--------------------
那个不是乱码,是union码。
如果要正常显示中文,可以参考:http://blog.csdn.net/fdipzone/article/details/28766357
------解决方案--------------------
json_encode 是编码函数,产生的自然是编码后结果
其中出现一些你不能识别的成分,不也是很正常的吗?
$s = "中文名称";<br />echo urlencode($s); //%E4%B8%AD%E6%96%87%E5%90%8D%E7%A7%B0<br />echo base64_encode($s); //5Lit5paH5ZCN56ew<br />

既然你能接受这些编码的结果,那又为何不能接受
echo json_encode($s); //"\u4e2d\u6587\u540d\u79f0"
这样的结果呢?

至于为什么要用 unicode 十六进制内码 表示,个人认为是 php 的败笔
1、由于要取得 unicode 内码,所以就有传入数据的字符集识别问题。正因为他不能识别字符集,所以 json 函数只适用于 utf-8
2、传递到浏览器的任何字符集的文字,都会被浏览器统一转换为 unicode 编码,所以 json_encode 所做的编码转换是没有意义的。浏览器依然要有将十六进制串转换成 unicode 内码的动作 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn