json中文编码问题

在和微信接口交互的过程中需要传参json而里面有中文的存在,所以json_encode($data)编码后会形成

{"group":{"name":"2016\u8ba4\u8bc1\u65b0\u5ba2\u6237"}}

的格式 但是这样并不能被用户读懂解析 所以 查找资料后用了 json_encode($data,JSON_UNESCAPED_UNICODE) 这样来处理就可以了,然而实际上在服务器上跑的时候还是遇到问题,JSON_UNESCAPED_UNICODE报错。

仔细查询 发现这个参数是PHP5.4以后才支持解析,而我们服务器php版本5.3只能自己写函数来解析一下

<?php
/*
 * Add by lizhaoyao
 * Add at 2016-07-07 10:43
 * 由于 一般在PHP5.4中对json中中文转码直接用了json_encode($data,JSON_UNESCAPED_UNICODE)
 * 而 php5.3中 JSON_UNESCAPED_UNICODE 这个值是不存在的 所以要自己写一个兼容函数
 * 对变量进行 JSON 编码
 * @param mixed value 待编码的 value ,除了resource 类型之外,可以为任何数据类型,该函数只能接受 UTF-8 编码的数据
 * @return string 返回 value 值的 JSON 形式
 * */
function json_encode_ex( $value)
{
    if ( version_compare( PHP_VERSION,‘5.4.0‘,‘<‘))
    {
        $str = json_encode( $value);
        $str =  preg_replace_callback(
            "#\\\u([0-9a-f]{4})#i",
            function( $matchs)
            {
                return  iconv(‘UCS-2BE‘, ‘UTF-8‘,  pack(‘H4‘,  $matchs[1]));
            },
            $str
        );
        return  $str;
    }
    else
    {
        return json_encode( $value, JSON_UNESCAPED_UNICODE);
    }
}
?>

然后用函数 json_encode_ex调用就好了

{"group":{"name":"2016认证新客户"}}
时间: 2024-07-29 07:33:26

json中文编码问题的相关文章

php -- 解决php连接sqlserver2005中文乱码问题(附详细解决方法)

@[email protected]~~ --php5.2 --phpstudy --apache --sqlserver2005 @[email protected]~~问题描述 问题一:php连接sqlsever2005,输入中文,然后查询sqlserver中对应的数据,由于提交中文是UTF-8,而sqlserver的中文为GBK,所以字段无法匹配,没有查询结果. 问题二,php连接sqlsever2005,读取数据表数据,由于中文是UTF-8,而sqlserver的中文为GBK,读出来的中

python json 序列化反序列化 和 中文编码问题

在一个项目中,需要从云端获取一个json格式的数据,并保存到本地文件中,然后再读取出来,这中间要用到json的dumps方法和loads方法,以实现数据的序列化和反序列化.具体来说,dumps方法,可将json格式数据序列为python的相关的数据类型,通常用于打印等:loads方法则是相反,把python数据类型转换为json相应的数据类型格式要求,反序列化后可以对json数据进行各种操作.在编程过程还发现一个问题,在序列化时,中文汉字总是被转换为unicode码,在网上搜索后发现,在dump

python json.dumps 中的ensure_ascii 参数引起的中文编码问题

在使用json.dumps时要注意一个问题 >>> import json >>> print json.dumps('中国') "\u4e2d\u56fd" 输出的会是 '中国' 中的ascii 字符码,而不是真正的中文. 这是因为json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False: >>> import json >>> print jso

[转]python json.dumps 中的ensure_ascii 参数引起的中文编码

本文转自: 梁小白博客(http://biangbiang.cnblogs.com) 在使用json.dumps时要注意一个问题 >>> import json >>> print json.dumps('中国') \u4e2d\u56fd 输出的会是 中国中的ascii 字符码,而不是真正的中文. 这是因为json.dumps 序列化时对中文默认使用的ascii编码. 想输出真正的中文需要指定ensure_ascii=False: >>> impor

Python学习---JSON补充内容[中文编码 + dumps解析]

JSON补充内容[微信解决中文乱码,接上] import json # 英文显示 dic = {"hello": "world"} str = json.dumps(dic) # type(str) <class 'str'> str: {"hello": "world"} print("type(str)", type(str), 'str:', str) # 中文显示 r = {"

python中文编码&amp;json中文输出问题

python2.x版本的字符编码有时让人很头疼,遇到问题,网上方法可以解决错误,但对原理还是一知半解,本文主要介绍 python 中字符串处理的原理,附带解决 json 文件输出时,显示中文而非 unicode 问题.首先简要介绍字符串编码的历史,其次,讲解 python 对于字符串的处理,及编码的检测与转换,最后,介绍 python 爬虫采取的 json 数据存入文件时中文输出的问题. 参考书籍:Python网络爬虫从入门到实践 by唐松 在python 2或者3 ,字符串编码只有两类 : (

难道.NET Core R2连中文编码都不支持吗?

今天写了一个简单的.NET Core RC2控制台程序,发现中文显示一直是乱码.查看操作系统设置,没有问题:查看源文件编码,也没有问题:甚至查看了Console字符编码相关的注册表,依然没有发现问题.难道NET Core到了RC2,莫非连一些常用的编码都不支持吗? 现在给大家重现这个问题,通过VS 2015创建一个.NET Core控制台程序. 我们在Main方法中只编写了如下几行行程序,将输入的字符串直接打印出来. 1: using System; 2:  3: namespace App 4

[转]php返回json数据中文显示的问题

转自 : http://blog.csdn.net/superbirds/article/details/8091910 解决方法: [php] view plaincopy <?php function Notice(){ include './include/conn.php';  //数据库链接文件 $sql_notice = mysql_query('SELECT * FROM gg_notice where enable = "1" limit 0,10'); $not

Python中文编码过程中遇到的一些问题

首先,要明确encode()和decode()的差别 encode()的作用是将Unicode编码的字符串转换为其它编码格式. 比如:st1.encode("utf-8")  这句话的作用是将Unicode编码的st1编码为utf-8编码的字符串 decode()的作用是把其它编码格式的字符串转换成Unicode编码的字符串. 比如:st2.decode("utf-8") 这句话的作用是将utf-8编码的字符串st2解码为Unicode编码的字符串 第二,除Unic