一.问题描述

postman调用flask post接口,接口返回成功,成功修改数据,但是出现乱码

代码如下:

server.py:
mock接口实现接收url和data参数,再写入到csdn_mock.json中

import os
import sys
import json
#解决无法导入包的问题
basePath = os.getcwd()
sys.path.append(basePath)
from flask import Flask
from flask import request
import json
from chapter7.util.handle_json import jsonsOperator
app = Flask(__name__)@app.route('/mock',methods=['POST'])
def mock():request_method = request.methodif request_method == 'POST':'''#多种获取参数方式para_from_form = request.formpara_from_args = request.argspara_from_values = request.valuespara_from_json = request.get_data()'''#需要转为dict再操作json_data = json.loads(request.get_data())url = json_data.get("url")data = json_data.get("data")jsonsOperator.updateValue(url,data,"/chapter7/mock/csdn_mock.json")return data# return dataelse:data = json.dumps({'code' : 1,'meaasge' : '请求类型应为POST'},ensure_ascii=False)return dataif(__name__ == '__main__'):app.run()

csdn_mock文件:

{"/community/home-api/v1/get-fans-list":{"code": 200,"message": "success","data": {"list": [{"username": "weixin_59267405","nickname": "繁星253","userAvatar": "https://profile.csdnimg.cn/4/E/4/3_weixin_59267405","blogUrl": "https://blog.csdn.net/weixin_59267405","loginUserNameIsFollow": false,"blogExpert": false,"briefIntroduction": null},{"username": "weixin_44149960","nickname": "初衷模样?","userAvatar": "https://profile.csdnimg.cn/4/3/0/3_weixin_44149960","blogUrl": "https://blog.csdn.net/weixin_44149960","loginUserNameIsFollow": false,"blogExpert": false,"briefIntroduction": null},{"username": "tianxingyue13579","nickname": "tiandaochouqin510","userAvatar": "https://profile.csdnimg.cn/3/C/D/3_tianxingyue13579","blogUrl": "https://blog.csdn.net/tianxingyue13579","loginUserNameIsFollow": true,"blogExpert": false,"briefIntroduction": ""},{"username": "qq_41132114","nickname": "qq_41132114","userAvatar": "https://profile.csdnimg.cn/C/C/9/3_qq_41132114","blogUrl": "https://blog.csdn.net/qq_41132114","loginUserNameIsFollow": true,"blogExpert": false,"briefIntroduction": null}]}},"/community-personal/v1/attention-label":{"code": 200,"msg": "success","data": null}
}

JsonsOperator:

import os
import sys
basePath = os.getcwd()
sys.path.append(basePath)
import jsonclass JsonsOperator:def readJsons(self,filePath=None):'''读取filePath路径下json文件的所有信息'''location = Noneif filePath == None:location = basePath + "/chapter7/mock/csdn_mock.json"else:location = basePath + filePathprint("readJsons方法将要打开读的location是-------------》",location)with open(location, "rb") as f:###########json.load()用于从json文件中读取数据,返回dict类型res = json.load(f)# print("读取文件获得的res类型和值是:",type(res),"|",res)return resdef getValue(self,key,filePath=None):'''读取指定配置json文件里,key对应的value'''dict = self.readJsons(filePath)value = dict.get(key)#value是dict类型,直接返回即可,测试方法里访问dict来断言 处理# print("getMockRes---------->",type(value))return valuedef writeValue(self,data,path=None):'''向json文件写入数据(全部覆盖写入),比如写入cookie'''if path == None:path = "/chapter7/config/cookie.json"data = json.dumps(data,ensure_ascii=False)print("(((((((((((((",data)with open(basePath+path, "w",encoding="UTF-8") as f:f.write(data)def updateValue(self,key,data,path=None):'''增加或者更新json文件key-value''''''要求传入的key是字符串类型,data是dict类型'''print("updateValue方法传入的path是-------------》",path)if path == None:path = "/chapter7/mock/csdn_mock.json"#readJsons方法返回的就是dict类型initialMocks = jsonsOperator.readJsons(path)#  #data需要转换为dict类型#  data = json.loads(data)initialMocks[key] = datajsonsOperator.writeValue(initialMocks,path)jsonsOperator = JsonsOperator()if(__name__ == "__main__"):data = {"lll":"hhhh"}jsonsOperator.writeValue(data)

二.问题解决

1.在updateValue方法内部增加打印,打印写入文件前的data信息

发现没有出现乱码

2.考虑写入文件时指定编码

def writeValue(self,data,path=None):'''向json文件写入数据(全部覆盖写入),比如写入cookie'''if path == None:path = "/chapter7/config/cookie.json"data = json.dumps(data,ensure_ascii=False)print("(((((((((((((",data)with open(basePath+path, "w") as f:f.write(data.encode(encoding="UTF-8"))

postman请求,
出现500错误

查看终端报错:

 File ".\chapter7\flask\server.py", line 29, in mockjsonsOperator.updateValue(url,data,"/chapter7/mock/csdn_mock.json")File "D:\D1\code\AutoTest\python_interface_autotest\PythonInterfaceAutoTest\chapter7\util\handle_json.py", line 59, in updateValuejsonsOperator.writeValue(initialMocks,path)File "D:\D1\code\AutoTest\python_interface_autotest\PythonInterfaceAutoTest\chapter7\util\handle_json.py", line 46, in writeValuef.write(data.encode(encoding="UTF-8"))
TypeError: write() argument must be str, not bytes

3.查看encode信息

encode() 方法为字符串类型(str)提供的方法,用于将 str 类型转换成 bytes 类型,这个过程也称为“编码”

与此相对,

decode() 方法用于将 bytes 类型的二进制数据转换为 str 类型,这个过程也称为“解码”

既然encode返回是bytes类型,那么尝试将打开文件的方式改为"wb"(只写+二进制模式)

with open(basePath+path, "wb") as f:f.write(data.encode(encoding="UTF-8"))

保存启动,postman再次调用


查看json文件有无修改成功,乱码是否修复

如图已成功修复

4.或者可以在with open中指定编码方式

要写入特定编码的文本文件,就给open()函数传入encoding参数,将字符串自动转换成指定编码
字符编码

with open(basePath+path, "w",encoding="UTF-8") as f:f.write(data)


python with open方式写入文件出现乱码问题解决相关推荐

  1. Python爬虫笔记——解决python 写入文件中文乱码问题

    原链接: python 爬虫写入文件中文乱码问题解决 分析过程 根据网上的一些建议,将文件的打开编码改为 utf-8 ,结果跟本不起作用 奇怪的是用notepad 打开 csv 文件竟然显示正常,看来 ...

  2. php写入文本乱码,如何解决PHP用fwrite写入文件中文乱码的问题

    如何解决PHP用fwrite写入文件中文乱码的问题 发布时间:2020-07-15 13:52:07 来源:亿速云 阅读:220 作者:Leah 这期内容当中小编将会给大家带来有关如何解决PHP用fw ...

  3. Python实现将内容写入文件的五种方法总结

    本篇带你详细看一下python将内容写入文件的方法以及细节,主要包括write()方法.writelines() 方法.print() 函数.使用 csv 模块.使用 json 模块,需要的可以参考一 ...

  4. 把结构用二进制方式写入文件,并读出来[转]

    很简单,但是经常被问及的问题.下面的代码是C语言写的,将一个结构student用二进制的方式写入文件e:\fle.bxt中,并读取出来. #include <stdio.h> #inclu ...

  5. java 数据写入txt乱码_java写入文件是乱码

    java写入文件是乱码 我们读取.写入文件流时,经常会遇到乱码的现象,造成乱码的原因当然不可能是一个,这里主要介绍因为文件编码格式而导致的乱码的问题.首先,明确一点,文本文件与二进制文件的概念与差异. ...

  6. python listdir() 中文路径 中文文件夹 乱码 解决方法

    python listdir() 中文路径 中文文件夹 乱码 解决方法 参考文章: (1)python listdir() 中文路径 中文文件夹 乱码 解决方法 (2)https://www.cnbl ...

  7. python 保存本地乱码,解决python保存数据到csv文件中文乱码的方法

    解决python保存数据到csv文件中文乱码的方法 发布时间:2020-07-08 13:49:53 来源:亿速云 阅读:695 作者:清晨 小编给大家分享一下解决python保存数据到csv文件中文 ...

  8. 关于JAVA导出word或者excel文件中文乱码问题解决

    搜了一下,发现网上都是解决文件名乱码的问题,这里记录一下从数据库查询出的数据写入文件中文乱码的问题 个人采用的是对象查询出来以后转为json字符串,然后字符串进行转码,再转成jsonObject格式 ...

  9. Zip文件中文乱码问题解决方法(MAC->Windows)

    Zip文件中文乱码问题解决方法(MAC->Windows) 参考文章: (1)Zip文件中文乱码问题解决方法(MAC->Windows) (2)https://www.cnblogs.co ...

最新文章

  1. github组织存储库使用_为什么我不使用您的GitHub存储库
  2. ThreeJS的特效合成器和后期处理通道
  3. 检查一列数据的重复项 vba_01.VBA自动化办公——数据的局部加和
  4. python线程代码_python--(十步代码学会线程)
  5. 3D数学基础:图形与游戏开发---随笔一
  6. 昨晚三巨头聚餐,顺便聊了这三个问题
  7. ug中模型不见了怎么办_关于UG参数化建模的定义
  8. swift笔记1-点语法
  9. 2014计算机一级选择题,计算机一级选择题题库2014含答案
  10. charset参数 sqluldr2_sqluldr2 oracle直接导出数据为文本的小工具使用
  11. office2016安装mathtype7.4教程
  12. HTML实现直播礼物特效,抖音哪些礼物可以触发特效,抖音直播礼物特效大全
  13. [BZOJ1776] [Usaco2010 Hol]cowpol 奶牛政坛
  14. jmeter性能测试各个方法介绍
  15. supervisor详解-苏坡外泽
  16. Logging 之root 打印器来捣乱
  17. Unity开发游戏--2D坦克大战(一)
  18. 【quill-editor】富文本编辑器对图片的放大缩小拖拽的实现
  19. 手机APP开发:学JAVA转安卓APP开发是不是很容易?
  20. 2019年《安徽省阜阳市颍州区立体绿化工作实施方案》政策解读

热门文章

  1. Rosalind-001:统计核苷酸数目(Counting DNA Nucleotides)
  2. 沟通技巧——共情能力
  3. Sunplus SPHE1500/1510高清DVB方案的强大功能
  4. linux中使用jmeter压测
  5. C++ 捕获本机网卡的IP包并对其解析的实现
  6. 网络营销高人的8大生意经:病毒性营销
  7. Ventoy 制作U盘启动盘 使用教程
  8. Guava缓存过期的一些坑
  9. 华硕计算机硬件信息,ASUS PC Diagnostics
  10. 互联网竟然来自于冷战核威胁