首页 > 解决方案 > 从 flaks api 发送字节流给出 unicode 错误

问题描述

我正在尝试将 pdf 文件的字节对象从烧瓶 api 发送到其他烧瓶 api。但是每当我调用 api 时,我都会得到UnicodeDecodeError: 'utf-8' codec can't decode byte 0xac in position 10: invalid start byte。jsonify 方法是否试图解码我的字节流以及如何将 pdf 文件的字节对象发送到其他 api。

from flask import Flask, jsonify
import pandas as pd
import matplotlib.pyplot as plt

app = Flask(__name__)

@app.route('/')
def home():
    return('home')

@app.route('/convert_bytes')
def byteimage():
    data = pd.DataFrame({'Revenue Type': ['AMC USD', 'LICENSE USD', 'SAAS USD', 'PS FEES USD', 'CU FEES USD'],
                         'Value': [79_592_370, 158_602_448, 34_856_410, 37_566_036, 34_183_293]})
    
    fig = plt.figure(figsize=(10, 7))
    plt.pie(data['Value'], labels=data['Revenue Type'])
    plt.savefig('chart.pdf')
    with open('chart.pdf', 'rb') as file:
        doc = (file.read())
    dic = {'object':doc}
    
    return jsonify(dic)

if __name__ == '__main__':
    app.run(debug=True,host='localhost', port=8123)

输出

Traceback (most recent call last):
  File "C:\Users\1777304\PYTHON\lib\site-packages\flask\app.py", line 2464, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\1777304\PYTHON\lib\site-packages\flask\app.py", line 2450, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\1777304\PYTHON\lib\site-packages\flask\app.py", line 1867, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\1777304\PYTHON\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\1777304\PYTHON\lib\site-packages\flask\app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\1777304\PYTHON\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\1777304\PYTHON\lib\site-packages\flask\app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\1777304\PYTHON\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\1777304\PYTHON\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\1777304\PYTHON\lib\site-packages\flask\app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\1777304\Downloads\How+Python+Imports+Modules\How Python Imports Modules\example3b\flask_app_pdf\main.py", line 24, in byteimage
    return jsonify(dic)
  File "C:\Users\1777304\PYTHON\lib\site-packages\flask\json\__init__.py", line 370, in jsonify
    dumps(data, indent=indent, separators=separators) + "\n",
  File "C:\Users\1777304\PYTHON\lib\site-packages\flask\json\__init__.py", line 211, in dumps
    rv = _json.dumps(obj, **kwargs)
  File "C:\Users\1777304\PYTHON\lib\site-packages\simplejson\__init__.py", line 412, in dumps
    **kw).encode(obj)
  File "C:\Users\1777304\PYTHON\lib\site-packages\simplejson\encoder.py", line 298, in encode
    chunks = list(chunks)
  File "C:\Users\1777304\PYTHON\lib\site-packages\simplejson\encoder.py", line 696, in _iterencode
    for chunk in _iterencode_dict(o, _current_indent_level):
  File "C:\Users\1777304\PYTHON\lib\site-packages\simplejson\encoder.py", line 620, in _iterencode_dict
    yield _encoder(value)
 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xac in position 10: invalid start byte
127.0.0.1 - - [10/Jun/2021 23:52:36] "?[37mGET /convert_bytes?__debugger__=yes&cmd=resource&f=style.css HTTP/1.1?[0m" 200 -
127.0.0.1 - - [10/Jun/2021 23:52:36] "?[37mGET /convert_bytes?__debugger__=yes&cmd=resource&f=jquery.js HTTP/1.1?[0m" 200 -
127.0.0.1 - - [10/Jun/2021 23:52:37] "?[37mGET /convert_bytes?__debugger__=yes&cmd=resource&f=debugger.js HTTP/1.1?[0m" 200 -
127.0.0.1 - - [10/Jun/2021 23:52:37] "?[37mGET /convert_bytes?__debugger__=yes&cmd=resource&f=ubuntu.ttf HTTP/1.1?[0m" 200 -
127.0.0.1 - - [10/Jun/2021 23:52:37] "?[37mGET /convert_bytes?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1?[0m" 200 -
127.0.0.1 - - [10/Jun/2021 23:52:37] "?[37mGET /convert_bytes?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1?[0m" 200 -

标签: pythonflaskbytejsonify

解决方案


推荐阅读