Windows下Python2 Flask项目运行路径包含中文时,获取静态文件后台报错UnicodeDecodeError

当Flask项目运行路径包含中文时,请求静态文件时,后台报错:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xbd in position 1: ordinal not in range(128)


原因:

        os.path.join拼接str和unicode时需要对str先解码,解码时使用默认的编码(sys.getdefaultencoding(),一般为ascii),而路径获取到的多是系统的文件编码(sys.getfilesystemencoding(),windows一般为gbk),所以解码失败。

        请求静态文件时,Flask将文件名和静态文件夹拼接,文件名为unicode(Flask处理传入的参数默认为unicode),而静态文件夹static_folder由root_path和static_path拼接而成,其中root_path如果未指定的话会通过os.path.dirname(os.path.abspath(__file__))来获取,如此在windows下获取的就是gbk编码,最终导致上述错误。

解决办法:

        1、修改路径为不含中文可解决该问题。

        2、如果路径不可修改,必须包含中文路径时,可在初始化时,设置root_path来解决(Flask 0.10及之前不可用,因为Flask 0.10及之前版本构造函数没有root_path这个参数)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值