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

   2016-09-18 0
核心提示:这篇文章主要介绍了java解析php函数json_encode unicode 编码问题,需要的朋友可以参考下。android开发中在和服务器端接口对接时出现编码问题,从服务器端获取到的数据是 \u8bbe\u59071ID-\u8bbe\u59071\u540d\u79f0;\u8bbe\u59073id-\u8bbe\u59073\u540d\u79f

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语言解码:

第一种方法

public String unescapeUnicode(String str){ 
  StringBuffer b=new StringBuffer(); 
  Matcher m = Pattern.compile("\\\\u([0-9a-fA-F]{4})").matcher(str); 
  while(m.find()) 
   b.append((char)Integer.parseInt(m.group(1),16)); 
  return b.toString(); 
 } 

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

2. 使用 json_simple.jar 包解析

下载地址: http://www.lexue001.com/softs/455885.html

JSON.simple是一个简单的Java类库,用于解析和生成JSON文本。不依赖于其它类库,性能高。

Object obj=JSONValue.parse(jsonStr);return obj.toString(); 

三、PHP服务器端解决方法:

<html> 
<head><meta http-equiv="content-type" content="text/html;charset=utf-8"> 
<title>php生成 json 中文</title> 
<?php  
  
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)  
{  
 static $recursive_counter = 0;  
  
 if (++$recursive_counter > 1000)  
 {  
   die('possible deep recursion attack');  
 }  
  
 foreach ($array as $key => $value)  
 {  
  
  if (is_array($value))  
  {  
   //arrayRecursive($array[$key], $function, $apply_to_keys_also);  
  }  
  else 
  {  
   $array[$key] = $function($value); 
  }  
  
  if ($apply_to_keys_also && is_string($key))  
  {  
   $new_key = $function($key);  
  
   if ($new_key != $key)  
   {  
    $array[$new_key] = $array[$key];  
    unset($array[$key]);  
   }  
  }  
 } 
 $recursive_counter--;  
}  
  
function JSON($array)  
{  
 //arrayRecursive($array, 'urlencode', true);  
 //print_r($array); 
 $json = json_encode($array);  
 return urldecode($json);  
}  
  
$arrayarray = array 
  (  
   'Name'=>urlencode('php生成 json 中文'),  
   'Age'=>20  
  );  
  
echo JSON($array); 
echo '</br>'; 
echo urlencode('php生成 json 中文'); 
  
?>  
</body> 
</html> 
 
标签: JSON PHP
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • LUA解析json小demo
    需要修改的json数据gui-config.json{"configs": [{"server": "JP3.ISS.TF","server_port": 443,"password": "58603228","method": "aes-256-cfb","remarks": ""},{"serv
    03-16
  • typescript Json Convert
    关键代码this.data={};// json stringthis.dataStr=JSON.stringify(this.data);// json objectthis.convertData=JSON.parse(this.dataStr);示例代码示例代码参考资料TypeScript: Working with JSON
    02-09
  • nodejs package.json说明
    {"name": "test", //项目名称(必须),由小写英文字母、数字和下划线,不能含空格"version": "1.0.0", //项目版本(必须)"description": "This is for study gulp project !", //项目描述(必须)"homepage": "", //项目主页url " key
    02-09
  • PHP与java接口对接使用json格式请求 php接收pos
    PHP与java接口对接使用json格式请求$datajson = json_encode($param);$myheader= array('Content-Type: application/json; charset=utf-8','Content-Length: ' . strlen($datajson));$result = http_curl($url, 'xml', $datajson, 6, FALSE, ''
    02-09
  • php 判断一个变量是否是合法的json
    1.场景api验证前端json 类型字段合法性2.分析官网3.解决function json_validate($string) {if (is_string($string)) {@json_decode($string);return (json_last_error() === JSON_ERROR_NONE);}return false;} 
    02-09
  • ASP.NET 后台接收前台POST过来的json数据方法
     ASP.NET前后台交互之JSON数据 https://www.cnblogs.com/ensleep/p/3319756.html
    02-09
  • JSON数据的解析和生成(Rust) - zwvista
    JSON数据的解析和生成(Rust)JSON数据的解析和生成(Rust)课题将 JSON 字符串反序列化为 Persons 类(结构)的对象 ,然后将这个对象序列化为 JSON 字符串。Persons 类(结构)包含一个字段:Person 类(结构)的 persons 数组。Person 类(结构)包含两个
    02-09
  • Delphi Sysem.JSON 链式写法(转全能中间件)
    Delphi Sysem.JSON 链式写法(转全能中间件)
     链式写法有很多优点:连贯、语意集中、简洁、一气呵成、可读性强。比如要把 3.1415926 中的 59 提取为一个整数:Pi.ToString().Substring(5,2).ToInteger() 轻车熟路的感觉,让人觉得,哇!好帅的写法,牛x。      以前以为只有 TJSONBuilder 才支持链式
    02-09
  • =======服务端的数据发送和JSonStreamObject的
    现在IOCP的功能还剩下服务端数据的返回。还是采用netty的方式。netty返回数据的调用是这样的contenxt.write(TObject obj);这样将obj对象发送给客户端。 1.将回传的对象进行编码成buffer2.通过socket进行传送. 下面我贴出回传数据的过程.procedure TClientCo
    02-09
  • SuperObject(Delphi最好的JSON简析类) 扩展功能
    一直有个想法。SuperObject这么好用的Json简析类,序列化出来的Json排序是乱的。有时候想用SuperObject做保存树数据。这样一来排序都是乱乱的也就放弃了,这几天想改造一下SuperObject类。将改造过程记下。以便以后查阅。 最初想法增加ISuperObject属性SortM
    02-09
点击排行