首页 > 技术文章 > xadmin后台导出时gunicorn报错ascii

NolaLi 2018-10-19 14:30 原文

  django + xadmin + nginx + gunicorn部署后,xadmin后台导出model数据报错,gunicorn日志记录为:UnicodeEncodeError: 'ascii' codec can't encode characters in position 223-240: ordinal not in range(128)。

  深刻体会到本地环境,代码一切ok,并不代表测试环境ok,测试环境ok,并不代表预发环境ok,预发环境ok,生产环境可能会ok!每一个环境最好不要偷懒每个功能都需要一一测一下。

  报错信息说明是编码问题,找到xadmin源码下载文件的py文件(xadmin/plugins/export.py),具体修改如下:

# 227行开始注释两行,并修改如下
        # response['Content-Disposition'] = ('attachment; filename=%s.%s' % (
        #     file_name, file_type)).encode('utf-8')

        # 修复导出时gunicorn报错ascii
        from urllib.parse import quote
        response["Content-Disposition"] = \
            "attachment; " \
            "filenane=%s.%s;" \
            "filename*=UTF-8''%s.%s" %(
                quote(file_name),file_type,
                quote(file_name),file_type
            )

 

  网上还有中说法是在supervisor配置文件加上:environment=LANG="en_US.utf8", LC_ALL="en_US.UTF-8", LC_LANG="en_US.UTF-8",亲测好像没有效果。不得不说,编码是个神坑~

 

推荐阅读