Android开发中在和服务器端接口对接时出现编码问题,从服务器端获取到的数据是 “\u8bbe\u59071ID-\u8bbe\u59071\u540d\金沙城中心赌场,u79f0;\u8bbe\u59073id-\u8bbe\u59073\u540d\u79f0;\u8bbe\u59077id-\u8bbe\u59077\u540d\u79f0″
接口是通过php函数中json_encode进行编码后返回的,在客户端通过java.net.URLdecoder.decode()解码不管用,但是直接将以上字符串复制到decode()方法中可以正常解码,把接收到的字符串经过utf-8编码后不管用,最后在网上搜索相关资料找到解决方法。

  现象:众所周知使用json_encode可以方便快捷地将对象进行json编码,但是如果对象的属性中存在着中文,问题也就随之而来了。json_encode会将中文转换为unicode编码,例如:’胥’经过json_encode处理后变为’\u80e5’,最终的json中中文部分被替换为unicode编码。我们要解决的就是将对象转换为json并保证对象内部的中文在json中仍然是以正常的中文出现,现在看来只使用json_encode是不能达到目的的。

一,json_encode作用:

  我的解决方法:先将类中的中文字段进行url编码(urlencode),然后再对对象进行json编码(jsonencode),最后url解码(urldecode)json,即最终的json,里面的中文依旧是那个中文!

  1. json_encode — 对变量进行 JSON 编码。

测试代码如下:

说明:string json_encode ($value ),返回 value 值的 JSON
形式。

 1 <?php
 2 class myClass {
 3     public $item1 = 1;
 4     public $item2 = '中文';
 5     
 6     function to_json() {
 7         //url编码,避免json_encode将中文转为unicode
 8         $this->item2 = urlencode($this->item2);
 9         $str_json = json_encode($this);
10         //url解码,转完json后将各属性返回,确保对象属性不变
11         $this->item2 = urldecode($this->item2);
12         return urldecode($str_json);
13     }
14 }
15 
16 $c = new myClass();
17 echo json_encode($c);
18 echo '<br/>';
19 echo $c->to_json();
20 echo '<br/>';
21 echo json_encode($c);
22 echo '<br/>';
23 echo json_encode('胥');
24 ?>

参数:待编码的 value ,除了resource 类型之外,可以为任何数据类型

程序输出结果:

        该函数只能接受 UTF-8 编码的数据(译注:指字符/字符串类型的数据)

{"item1":1,"item2":"\u4e2d\u6587"}
{"item1":1,"item2":"中文"}
{"item1":1,"item2":"\u4e2d\u6587"}
"\u80e5"

返回值:编码成功则返回一个以 JSON 形式表示的 string 。

希望本文起到抛砖引玉的作用,收集大家更好的解决方法……!

二,客户端用java语言解码:


发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图