Java解析php函数json_encode unicode的编码问题-阿里云开发者社区

开发者社区> 行者武松> 正文

Java解析php函数json_encode unicode的编码问题

简介:
+关注继续查看


这篇文章主要介绍了java解析php函数json_encode unicode 编码问题,需要的朋友可以参考下。

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> 



作者:wulei

来源:51CTO

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
前端智能化漫谈 (3) - pix2code推理部分解析
# 前端智能化漫谈 (3) - pix2code推理部分解析 上一节我们将pix2code的流程梳理了一遍,相信大家已经都可以跑起来了。 在谈pix2code的算法改进之前,关于训练和推理过程还有若干细节我们还需要进一步讨论一下。 ## onehot编码 上次我们讲到create_binary_representation,就是将单词转换成one hot编码。 ```
4892 0
php编码
原文:php编码 PHP 页面编码声明与用header或meta实现PHP页面编码的区别     php的header来定义一个php页面为utf编码或GBK编码 php页面为utf编码 header("Content-type: text/html; charset=utf-8"); ...
701 0
1--debug时安卓源码不一致问题--Source code does not match the bytecode
AS--debug时:Source code does not match the bytecode 解决方案:保持模拟器与编译版本一致,即: 编译版本与运行版本一致
2509 0
《 自动化测试最佳实践:来自全球的经典自动化测试案例解析》一一3.3 如何实施TiP
本节书摘来自华章出版社《 自动化测试最佳实践:来自全球的经典自动化测试案例解析 》一 书中的第3章,第3. 节,作者:(英)Dorothy Graham Mark Fewster 著 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1087 0
利用MaxCompute内建函数及UDTF转换json格式日志数据
本文介绍了如何使用MaxCompute UDF对JSON格式的日志进行信息提取和转换。
8152 0
[复变函数]第06堂课 2.1 解析函数的概念与 Cauchy-Riemann 方程 (续)
2. 解析函数及其简单性质 (1) 定义: a. 若 $w=f(z)$ 在区域 $D$ 内可微, 则称 $f$ 在 $D$ 内解析; b. 若 $w=f(z)$ 在 $z_0$ 处的某邻域内解析, 则称 $f$ 在 $z_0$ 处解析; c.
620 0
JavaWeb项目的中文乱码的原因以及Servlet中处理GET请求和POST请求编码过滤器
一、乱码原因 ①传输方和接收方采用的编码不一致。传输方对参数采用的是UTF-8编码而接收方却用GBK进行解析,当然是乱码。 ②Tomcat服务器默认采用的ISO8859-1编码得到参数值。虽然①中采用了同样的编码方式,但经过tomcat一处理,也会出现乱码(GET方式)   二、解决办法 方法一 每次传输都手动设置编码(GET方式传输数据) 传输方 String name =
1281 0
+关注
行者武松
杀人者,打虎武松也。
17142
文章
2569
问答
文章排行榜
最热
最新
相关电子书
更多
《Nacos架构&原理》
立即下载
《看见新力量:二》电子书
立即下载
云上自动化运维(CloudOps)白皮书
立即下载