千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > JSON中文乱码的原因和解决方案

JSON中文乱码的原因和解决方案

来源:千锋教育
发布人:xqq
时间: 2023-11-24 15:46:32 1700811992

一、编码问题

1、JSON 的编码格式默认为 UTF-8,而中文的编码格式是 GBK 或 GB2312。当使用 GBK 或 GB2312 编码格式的中文数据转为 JSON 数据格式后,在其他系统中再解析时,就会出现中文乱码的问题。


    {
        "name": "王五",
        "gender": "男",
        "age": "30"
    }

可以看到以上代码中的名字字段使用了中文,如果我们对其进行转换,如下所示:


    {
        "name": "\u738b\u4e94",
        "gender": "男",
        "age": "30"
    }

我们可以看到\u738b\u4e94这一部分就是 name 值的 Unicode 编码,而非我们希望的中文汉字。而如果在前端中对 JSON 数据进行解析时,就会出现中文乱码的问题。

所以我们需要在转换前,将中文数据转为UTF-8编码格式:


    $json = json_encode($data,JSON_UNESCAPED_UNICODE);

二、字符集设置

在PHP项目中,我们需要对字符集进行设置,避免因为字符集的不同而产生中文乱码。这里我们以 MySQL 数据库为例子:


    $conn = mysqli_connect($servername, $username, $password, $dbname);
    mysqli_set_charset($conn, "utf-8");

同时在应用程序的响应头信息中,也需要设置字符集为 UTF-8。


    header("Content-Type: text/html;charset=UTF-8");

三、前后端数据传输问题

在前后端进行数据传输时,我们需要确保传输的数据中没有非法字符,否则也会出现中文乱码的问题。在后端应用程序中可以使用JSON_UNESCAPED_UNICODE参数对数据进行编码,同时在前端对数据进行解码时,我们可以使用JSON.parse()方法:


    //PHP界面
    $json = '{"name":"张三"}';
    $data = json_decode($json,true);

    //JS界面
    var data = JSON.parse(unescape('<%=json%>'));

四、HTTP头部信息

在HTTP头部信息中我们需要设置正确的 Content-Type 和字符集:


    header('Content-Type:application/json;charset=utf-8');

五、统一使用UTF-8编码格式

我们需要确保服务器、数据库、应用程序和前端都是以UTF-8编码格式进行数据存储和传输,以避免编码格式在传输过程中的不兼容和导致的中文乱码问题。同时在前端页面使用UTF-8编码格式进行编码,可以有效避免浏览器解析JSON数据时出现乱码的情况。

六、小结

在JSON中文乱码问题的解决方案中,主要是从数据的编码格式、字符集设置、前后端数据传输、HTTP头部信息和统一使用UTF-8编码格式五个方面进行了详细的阐述,并提供了相应的代码示例。只有秉承着正确的编码格式和良好的代码规范,我们才能避免JSON中文乱码问题,并开发出高质量的应用程序。

tags: lambdapeek
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT