Python3.6 SyntaxError: 'ascii' codec can't decode byte 0xe5 in position 7: ordinal not in range(128)

Django项目上线之后,死活无法正常运行(本地正常)

开始排查了好久才发现是字符编码问题

前面的小坑基本有一些,好(我)解(忘)决(了)。

不好解决的是这个报错:

SyntaxError: 'ascii' codec can't decode byte 0xe5 in position 7: ordinal not in range(128)

具体表现如下:默认编码是utf-8,但是输出中文会报错。

看到很多方法是这样:在文件开头加上,然鹅并没有用,这是这个只适用于python2

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

或者这样:(这个是文件内)

#! /usr/bin/env python   
# -*- coding: utf-8 -*-   
  
s = '中文'   
s.decode('utf-8').encode('gb18030')   

等等

python3的默认编码方式就是utf-8,所以无需设置。

还有一些是文件读取过程中报这个错误,解决方法是,加:

  '字符串'.encode('utf-8')

之后看到一个解决办法是在控制台输入:

export LC_ALL="en_US.UTF-8"

问题解决了!

python 可以正常输出了!django项目运行正常了!

然而事情并没有想象的这么简单,当我把xshell关掉之后,项目挂掉了!

(ps:这个挂掉的根本原因是没有后台运行参考:链接

这个设置只是临时的设置。

我突然意识到似乎这是linux系统默认语言的设置方法,

用echo 输出中文,果然是乱码!

于是找到了完美的解决方法:

 

成功!重启服务器有效

# sudo vim /etc/profile
在末尾添上:

export LC_ALL="en_US.UTF-8"
export LANG="zh_CN.GBK"

参考:https://blog.csdn.net/huoyunshen88/article/details/41113633

posted @ 2019-03-05 11:26  徐小白  阅读(1992)  评论(0编辑  收藏  举报