python http 返回json中文乱码

json.dumps(var,ensure_ascii=False)并不能解决中文乱码的问题

python 2.7版本

# -*- coding: utf-8 -*-
m = {'a' : '你好'}print m
=>{'a': '\xe4\xbd\xa0\xe5\xa5\xbd'}print json.dumps(m)
=>{"a": "\u4f60\u597d"}print json.dumps(m,ensure_ascii=False)
=>{"a": "浣犲ソ"}print json.dumps(m,ensure_ascii=False).decode('utf8').encode('gb2312')
=>{"a": "你好"}

最近接触python,遇到这个问题,上网查资料,基本上都是说json.dumps(var,ensure_ascii=False)可以解决中文编码问题,然而并没有。

要解决中文编码,需要知道python2.7对字符串是怎么处理的:

  • 由于# -- coding: utf-8 -- 的作用,文件内容以utf-8编码,所以print m
    输出的是utf-8编码后的结果{‘a’: ‘\xe4\xbd\xa0\xe5\xa5\xbd’}

  • json.dumps 序列化时对中文默认使用的ascii编码, print json.dumps(m)输出unicode编码的结果

  • print json.dumps(m,ensure_ascii=False)不使用的ascii编码,以gbk编码
    ‘你好’ 用utf8编码是 %E4%BD%A0%E5%A5%BD 用gbk解码是 浣犲ソ

  • 字符串在Python内部的表示是unicode编码。

  • 因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

  • decode的作用是将其他编码的字符串转换成unicode编码

    decode(’utf-8’)表示将utf-8编码的字符串转换成unicode编码。

  • encode的作用是将unicode编码转换成其他编码的字符串

    encode(‘gb2312’),表示将unicode编码的字符串转换成gb2312编码。

    python3中没有这种问题,所以最简单的方法是引入__future__模块,把新版本的特性导入到当前版本

from __future__ import unicode_literalsprint json.dumps(m,ensure_ascii=False)=>{"a": "你好"}

在写入文件的时候出现了Python2.7的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误

大神的解决方法:
不使用open打开文件,而使用codecs:

from __future__ import unicode_literals
import codecs
fp = codecs.open('output.txt', 'a+', 'utf-8')
fp.write(json.dumps(m,ensure_ascii=False))
fp.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript中Array的操作

concat(组合数组)join(数组转字符串)pop(删除最后一个元素)shift(删除第一个元素)push(在数组尾部添加新元素)unshift(在数组头部添加新元素&…

Github git clone国内mirror加速

Github国内加速克隆及下载 fastgit.orghttps://doc.fastgit.org/ gitclone.comhttps://gitclone.com/ giteehttps://gitee.com/mirrors cnpmjs.orghttps://github.com.cnpmjs.org/ 克隆加速 #原地址 git clone https://github.com/kubernetes/kubernetes.git#改为 git cl…

ASP.NET MVC 5调用其他Action

引用代码: Html.Action("Index", "BaseData", new { d "variety" }) 后台获取参数: RouteData.Values["d"]

OpenscenGraph中控制swapbuffer的方法(用于多机大屏幕同步显示机制)

*************************************************************************************************************************osg多机同步swapbuffer的实现方式。***osg中真正调用opengl::swapbuffer的地方在 osg::GrapicsContext::swapBuffers()中调用的。***如果develope…

linq to entity常用操作

一、聚合函数查询 double sum 0;using (xxxEntities db new xxxEntities()){sum db.userinfo.AsNoTracking().Where(d > d.idid).Sum(m > (double?)m.money).GetValueOrDefault();}return sum; 二、删除操作 int result 0;if (id > 0){using (gghdbEntities db …

python中使用cv2.findContours返回值too many values to unpack (expected 2)错误如何解决

python中使用cv2.findContours返回值too many values to unpack (expected 2)错误如何解决 具体原因: opencv-python 版本还有一定关系,4.2的上面就行。3.4.2的得改成下面。 解决方法,将 contours, hierarchy cv2.findContours(binary,cv…

java简单自定义Annotation

为什么80%的码农都做不了架构师?>>> 原文内容比较多,这里就简单地说一下。java 5以后增加了3个annotation, Override Deprecated SuppressWarnings 以上annotation用途就不说了。java中自定义annotation需要interface关键字和用到…

c#官方推荐md5通用加密类

/// <summary>/// MD5加密/// </summary>/// <param name"input">需要加密的字符串</param>/// <returns></returns>public static string MD5Encrypt(string input){return MD5Encrypt(input, new UTF8Encoding());}/// <su…

Tensorflow Object detection API 在 Windows10 配置

Tensorflow Object detection API 在 Windows10 下的配置不如在 Ubuntu 下配置方便&#xff0c;但还是有方法的&#xff0c;介绍一下我的配置流程。官方目标检测的demo中调用了大量的py文件&#xff0c;不利于项目的部署&#xff0c;因此我将其合并为两个文件 ##1.Tensorflow m…

使用jq的toggle函数实现全选功能遇到的问题

2019独角兽企业重金招聘Python工程师标准>>> 今天做网站后台管理的时候&#xff0c;要实现一个单选全选的功能&#xff0c;很简单的功能&#xff0c;不过&#xff0c;遇到了一个很诡异的问题&#xff0c;写出来跟大家分享下。 功能就不赘述了&#xff0c;大家都懂&…

linq to js使用汇总

用途&#xff1a;方便js操作查询json数据。 下载网址&#xff1a;http://jslinq.codeplex.com/ 使用方法&#xff1a;只需要引用linq.js即可。 查询方法&#xff1a; 一、where查询 var myList [{ Name: "Jim", Age: 20 },{ Name: "Kate", Age: 21 },…

GO国内镜像加速模块下载

众所周知&#xff0c;国内网络访问国外资源经常会出现不稳定的情况。 Go 生态系统中有着许多中国 Gopher 们无法获取的模块&#xff0c;比如最著名的 golang.org/x/...。并且在中国大陆从 GitHub 获取模块的速度也有点慢。 因此设置 CDN 加速代理就很有必要了&#xff0c;以下…

JS过滤emoji

function filterEmoji(text){var ranges [\ud83c[\udf00-\udfff], \ud83d[\udc00-\ude4f], \ud83d[\ude80-\udeff]];return text.replace(new RegExp(ranges.join(|), g), );} 如果上述代码不能适用所有情景&#xff0c;适用调用前的字符length和处理后的字符长度去对比&#…

AbstractEndpoint 和 ProtocolHandler

2019独角兽企业重金招聘Python工程师标准>>> AbstractEndpoint 和 ProtocolHandler /** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements. See the NOTICE file distributed with* this work for additiona…

HOG + SVM 实现图片分类(python3)

前言 大家能看到这篇文章&#xff0c;想必对HOG还是有些了解了&#xff0c;那我就不赘述了&#xff0c;其实我自己不太懂&#xff0c;但是还是比刚开始好一些了。下面我的代码是参考这位博主的&#xff1a;点我查看 上面那位博主是用的cifar-10数据集&#xff0c;但是我们的数…

sql无限递归查询

--------------所有子集数据包括自己---------------------CREATE PROCEDURE ALLSONID INTASBEGINWITH CTE AS(SELECT ID,PID,NAME,0 AS LVL FROM TEST1WHERE ID IDUNION ALLSELECT D.ID,D.PID,D.NAME,LVL1 FROM CTE C INNER JOIN TEST1 DON C.ID D.PID)SELECT * FROM CTEEND…

随机过程及其在金融领域中的应用 第三章 习题 及 答案

随机过程及其在金融领域中的应用 第三章 习题 及 答案 本文地址: http://blog.csdn.net/caroline_wendy/article/details/16879515 包含: 1, 2, 5, 15; 第1题: 第2题: 第5题: 第15题: 转载于:https://blog.51cto.com/spikeking/1388002

Fiddler手机抓包(iPhone)

Fiddler不但能截获各种浏览器发出的HTTP/HTTPS请求&#xff0c;也可以截获各种移动设备&#xff08;包括Andriod和IOS&#xff09;发出的HTTP/HTTPS请求。最关键的是&#xff0c;Fiddler还可以断点调试&#xff0c;修改Request和Response&#xff0c;而且即便抓包的是IOS设备&a…

聊聊asp.net中Web Api的使用

扯淡 随着app应用的崛起&#xff0c;后端服务开发的也越来越多&#xff0c;除了很多优秀的nodejs框架之外&#xff0c;微软当然也会在这个方面提供更便捷的开发方式。这是微软一贯的作风&#xff0c;如果从开发的便捷性来说的话微软是当之无愧的老大哥&#xff0c;只是鱼和熊掌…

python脚本去除文件名里的空格

原始文件名里很多空格&#xff0c;写了个python脚本去除文件名里的空格 import osfilepath"image" # 文件目录名 zimulus os.listdir(filepath)for musicname in zimulus:#改目录下的文件名oldmusicpath filepath \\ musicnamenewmusicname musicname.replace( …