You need to enable JavaScript to run this app. C#将wav转base64 POST至Flask API 解码报utf-8 0x80无效起始字节错误求助
优惠活动
大模型
产品
解决方案
定价
更多

C#将wav转base64 POST至Flask API 解码报utf-8 0x80无效起始字节错误求助

报错定位与修复方案

核心触发原因

报错'utf-8' codec can't decode byte 0x80 in position 28: invalid start byte完全来自Flask端的冗余逻辑,和C#上传链路无关。

  • C#端从读取wav、转base64、打包JSON用UTF-8编码POST的全流程是合规的,Flask通过request.json拿到的File字段已经是正常的base64字符串,传输层没有问题。
  • 错误触发点:base64解码完成后,代码多执行了一行_file = file_decoded.decode()。base64解码得到的是wav原始二进制字节流,本身不是文本,不满足UTF-8的编码规则,强行转字符串必然遇到无法识别的字节(比如报错中的0x80)抛出异常。
  • 这行代码属于无意义冗余:后续保存文件用的是wb模式直接写入file_decoded,根本没用到定义的_file变量。

修正后的Flask接口代码

删掉多余的二进制转字符串逻辑即可,修正后的代码还补充了自动创建保存目录的兜底逻辑,避免因目录不存在报错:

@app.route('/api/Call/putWavFile', methods=['POST'])
def PutWavFile():
    if not request.json or not 'token' in request.json: 
        abort(400)
    
    try:
        filename = request.json['FileName']
        base64_str = request.json['File'] 
        # base64字符串转原始wav二进制
        file_decoded = base64.decodebytes(base64_str.encode('utf-8').strip())

        path_to_save = os.path.join(os.getcwd(), 'Watch', filename)
        # 自动创建保存目录
        os.makedirs(os.path.dirname(path_to_save), exist_ok=True)
        with open(path_to_save, mode='wb') as f:
            f.write(file_decoded)

        return jsonify({"FileCreated": "Success"})
    except Exception as exc:
        print(f"FileError: {str(exc)}")
        return jsonify( {"Error": f"{str(exc)}"} )

注意事项

  • 现有C#端逻辑不需要任何调整,小体积wav文件的传输场景下,base64+JSON的方案完全可用。
  • 建议对接收的filename做路径穿越校验,避免恶意构造的文件名覆盖服务器其他位置的文件。

内容的提问来源于stack exchange,提问作者Mxolisi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.08 16:15:03