-
最近写的接口代码中无论用浏览器还是postman,只要输出序列化后的JSON数据中存在中文,中文部分就会转而显示一堆有规律的ASCII表示码。
-
我第一眼觉得这不是乱码,乱码是文件编码方式和文件查看方式不一致导致,通常乱码是显示一些没有规律的字符。
-
在接口返回的数据中,我们经常会返回json或者xml格式,php的json序列化函数
json_encode
非常好用,但是默认会把中文编码为ASCII码(注意,很多人认为这是乱码,其实不是
),尤其在调试接口时,看到一大串的ASCII码,一脸懵逼,不知是对是错:
代码:
# php
class Person
{
public$num;
public$name;
function __construct($_num,$_name)
{
$this->num=$_num;
$this->name=$_name;
}
}
$pIns=new Person('A001','张三');
//json_encode序列化
$res=json_encode($pIns);
echo$res;
结果:
image.png
- 是不是看着很不爽,解决办法也很简单,网上找的,PHP5.4版本之后加入的功能,已经给Json新增了一个选项: JSON_UNESCAPED_UNICODE。加上这个选项后,就不会自动把中文编码了。
试一下:
class Person
{
public$num;
public$name;
function __construct($_num,$_name)
{
$this->num=$_num;
$this->name=$_name;
}
}
$pIns=new Person('A001','张三');
//json_encode序列化 $res=json_encode($pIns,JSON_UNESCAPED_UNICODE);
echo $res;
效果:
image.png
- 当然,由于JSON数据只是起传输作用,传输过程中显示为中文并不安全,信息容易被截取。所以建议使用chrome的jsonview插件,自动将中文ASCLII转换,并且附带格式如图: image.png
网友评论