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

时间: 2024-10-02 07:42:30

Java解析php函数json_encode unicode的编码问题的相关文章

java解析php函数json_encode unicode 编码问题_java

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()解码不管用,但是直接将

Java实现二维码QRCode的编码和解码与示例解析_java

Java实现二维码QRCode的编码和解码 涉及到的一些主要类库,方便大家下载: 编码lib:Qrcode_swetake.jar   (官网介绍-- http://www.swetake.com/qr/index-e.html)             解码lib:qrcode.jar                 (官网介绍-- http://sourceforge.jp/projects/qrcode/) [一].编码: Java代码QRCodeEncoderHandler.java p

JavaScript Unicode 字符编码详解教程

Unicode 是为了解决传统的字符编码方案的局限而产生的,例如ISO 8859所定义的字符虽然在不同的国家中广泛地使用,可是在不同国家间却经常出现不兼容的情况.很多传统的编码方式都有一个共同的问题,即容许电脑处理双语环境(通常使用拉丁字母以及其本地语言),但却无法同时支持多语言环境(指可同时处理多种语言混合的情况). 一.Unicode是什么? Unicode源于一个很简单的想法:将全世界所有的字符包含在一个集合里,计算机只要支持这一个字符集,就能显示所有的字符,再也不会有乱码了. 它从0开始

Unicode字符编码标准

1. 编码知识  1.1 文本和字符  在计算机程序中或者数据文件里,文本(text)是作为数字序列存储的.序列中的数字是具有不同大小.取值和解释的整数.如何解释这些整数是由字符集(character set).编码(encoding)决定的.  文本主要是由字符(character)组成.在格式文本(fancy text, or rich text)中包括显示属性,如颜色.斜体字.上标等,但仍然是以字符组成的纯文本(plain text)为基础的.有时,格式文本与纯文本之间的区别很复杂,依赖于

Java 和 JavaScript 真正通用的Base64编码详解_java

 Java 和 JavaScript Base64编码 在开发Java  Web应用的时候,可能会在服务器端用Java做Base64编码,而在客户端用JavaScript进行解码.这样就要求两边的Base64编码机制保持一致. 使用Base64编码,可能会碰到各种奇怪情况,甚至怀疑编码有bug.但实际上不是这样的.Base64理论上操作的对象不是字符串而是字节数组.它的原理就是把ASCII码的255个字符缩小到用64个来表示.具体就是原来三个字节用四个字节表示,编码后长度有一定的增长. 1) 最

Java解析网络数据流的三种特殊方法

Java作为最开放的语言,已越来越受到网络程序员的青睐.但这一青睐族有着同样的经历--曾经都为网络上通信的Java数据格式而烦脑. 笔者也不例外,曾经为此而查阅了很多文档,经过反复测试才 得以解决,如今笔者已经在所从事的很多电子政务项目中顺利的应用.今天笔者写此文,介绍用Java解析网络数据的三种特殊方法,希望对正在寻求这方面问题答案的读者有所帮助. UTF8转换成GB2312 当我们在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式.

excel-关于java解析EXCEL问题

问题描述 关于java解析EXCEL问题 有份 EXCEL 文件无法用jxl和poi解析.poi解析时报错:Exception in thread ""main"" java.io.IOException: Invalid header signature; read 0x7265562D454D494D expected 0xE11AB1A1E011CFD0后来网上一查这个错,知道这个Excel文件 原来是一个mht/mhtml格式的文件,当然解析不了,可以通过打

java解析xml的问题。。。

问题描述 java解析xml的问题... 我有三个xml文件,里面的节点格式不一致大致相同,怎么样写个通用的方法将我指定的内容读取出来? 解决方案 http://blog.csdn.net/wwww1988600/article/details/9019785 解决方案二: 原文:点击打开链接 今日在开发一个实现读取XML文件指定节点的值或属性值的公用方法时,碰到了中文乱码问题,最终通过百度和google把它搞定了,今天在这里发表一下,一个作为自己的资源,另一个也希望能给其他人带来一些帮助. x

Java解析xml的四种方法汇总_java

1. DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上下导航,而不是像SAX