UDN-企业互联网技术人气社区

板块导航

浏览  : 1328
回复  : 0

[讨论交流] Java解析php函数json_encode unicode的编码问题

[复制链接]
cat77的头像 楼主
发表于 2016-9-30 10:07:14 | 显示全部楼层 |阅读模式
1.png

  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_encode — 对变量进行 JSON 编码。

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

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

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

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

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

  第一种方法
  1. public String unescapeUnicode(String str){
  2.   StringBuffer b=new StringBuffer();
  3.   Matcher m = Pattern.compile("\\\\u([0-9a-fA-F]{4})").matcher(str);
  4.   while(m.find())
  5.    b.append((char)Integer.parseInt(m.group(1),16));
  6.   return b.toString();
  7. }
复制代码

  直接使用unescapeUnicode()方法解码就可以了。

  2. 使用 json_simple.jar 包解析

  下载地址: http://www.jb51.net/softs/455885.html

  JSON.simple是一个简单的Java类库,用于解析和生成JSON文本。不依赖于其它类库,性能高。
  1. Object obj=JSONValue.parse(jsonStr);return obj.toString();
复制代码

  三、PHP服务器端解决方法
  1. <html>
  2. <head><meta http-equiv="content-type" content="text/html;charset=utf-8">
  3. <title>php生成 json 中文</title>
  4. <?php  
  5.   
  6. function arrayRecursive(&$array, $function, $apply_to_keys_also = false)  
  7. {  
  8. static $recursive_counter = 0;  
  9.   
  10. if (++$recursive_counter > 1000)  
  11. {  
  12.    die('possible deep recursion attack');  
  13. }  
  14.   
  15. foreach ($array as $key => $value)  
  16. {  
  17.   
  18.   if (is_array($value))  
  19.   {  
  20.    //arrayRecursive($array[$key], $function, $apply_to_keys_also);  
  21.   }  
  22.   else
  23.   {  
  24.    $array[$key] = $function($value);
  25.   }  
  26.   
  27.   if ($apply_to_keys_also && is_string($key))  
  28.   {  
  29.    $new_key = $function($key);  
  30.   
  31.    if ($new_key != $key)  
  32.    {  
  33.     $array[$new_key] = $array[$key];  
  34.     unset($array[$key]);  
  35.    }  
  36.   }  
  37. }
  38. $recursive_counter--;  
  39. }  
  40.   
  41. function JSON($array)  
  42. {  
  43. //arrayRecursive($array, 'urlencode', true);  
  44. //print_r($array);
  45. $json = json_encode($array);  
  46. return urldecode($json);  
  47. }  
  48.   
  49. $arrayarray = array
  50.   (  
  51.    'Name'=>urlencode('php生成 json 中文'),  
  52.    'Age'=>20  
  53.   );  
  54.   
  55. echo JSON($array);
  56. echo '</br>';
  57. echo urlencode('php生成 json 中文');
  58.   
  59. ?>  
  60. </body>
  61. </html>
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部