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

相关文章
|
1天前
|
Java 程序员 API
Java 8新特性之Lambda表达式与Stream API的深度解析
【5月更文挑战第12天】本文将深入探讨Java 8中的两个重要新特性:Lambda表达式和Stream API。我们将从基本概念入手,逐步深入到实际应用场景,帮助读者更好地理解和掌握这两个新特性,提高Java编程效率。
11 2
|
3天前
|
XML JavaScript Java
详解Java解析XML的四种方法
详解Java解析XML的四种方法
|
3天前
|
存储 安全 Java
12条通用编程原则✨全面提升Java编码规范性、可读性及性能表现
12条通用编程原则✨全面提升Java编码规范性、可读性及性能表现
|
4天前
|
Java
解析java中的数组
解析java中的数组
10 3
|
4天前
|
存储 Java 程序员
Java面向对象编程的基础概念解析
Java面向对象编程的基础概念解析
13 0
|
6天前
|
分布式计算 Java API
Java8 Lambda实现源码解析
Java8的lambda应该大家都比较熟悉了,本文主要从源码层面探讨一下lambda的设计和实现。
|
10天前
|
PHP Perl
PHP-ereg()函数
但再次强调,不建议使用ereg()函数,而应该改用preg_match()函数来执行更灵活和强大的正则表达式匹配操作。
19 4
|
11天前
|
安全 前端开发 Java
10:基于Servlet模拟用户登录功能的实现与解析-Java Web
10:基于Servlet模拟用户登录功能的实现与解析-Java Web
24 3
|
12天前
|
供应链 Java API
Java 8新特性解析及应用区块链技术在供应链管理中的应用与挑战
【4月更文挑战第30天】本文将深入探讨Java 8的新特性,包括Lambda表达式、Stream API和Optional类等。通过对这些新特性的详细解析和应用实例,帮助读者更好地理解和掌握Java 8的新技术。
|
12天前
|
Java Spring
Java 效率编码 必备插件 Lombok 让代码更优雅
该内容是一个关于Lombok插件的教程摘要:介绍了Lombok用于减少Java开发中的模板代码,提升效率;讲解了如何在IntelliJ IDEA中安装Lombok插件,以及在pom.xml中添加依赖;并提到了@Data注解能自动生成getter/setter、equals、hashCode和toString方法,@Slf4j注解自动处理日志,@Builder用于构建对象,以及@AllArgsConstructor和@NoArgsConstructor注解生成构造函数。还鼓励探索更多Lombok的注解用法。