SyntaxError at /blog/ news/story
Non-ASCII character '\xe4' in file D:\MyPython\day23\HelloWorld\blog\views.py on line , but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details (views.py, line 42)

当使用中文时会报错:

def introduce(req):
return HttpResponse("<h1>ok你</h1>")

其解决方法是:在文件前面加入

#coding:utf-

其实不止在Django,在python文件中开头为了支持中文我们都应该加上

#coding:utf-

在初学时一直使用,只不过后来慢慢忘了,那时候使用的是:

# -*- coding:utf- -*-

当然,这两个都是可以使用的

另外:该注释最好放在文件开始,不然会无效

以上为回顾,下面开始重点!!!

重点+补充:上面只是针对某个文件下对应功能的编码,对于整个项目则用处不大,需要重新调整

在项目启动文件manage.py中修改系统的默认文件编码

原来文件编码是:python安装目录的Lib文件夹下,有一个叫site.py的文件

首先了解一下site.py模块: https://docs.python.org/2/library/site.html

文中说到This module is automatically imported during initialization

这个模块将在解释器启动的时候自动执行。

所有开始了解这个模块:

主函数:

def main():
global ENABLE_USER_SITE abs__file__()
known_paths = removeduppaths()
if ENABLE_USER_SITE is None:
ENABLE_USER_SITE = check_enableusersite()
known_paths = addusersitepackages(known_paths)
known_paths = addsitepackages(known_paths)
if sys.platform == 'os2emx':
setBEGINLIBPATH()
setquit()
setcopyright()
sethelper()
aliasmbcs()
setencoding()
execsitecustomize()
if ENABLE_USER_SITE:
execusercustomize()
# Remove sys.setdefaultencoding() so that users cannot change the
# encoding after initialization. The test for presence is needed when
# this module is run as a script, because this code is executed twice.
if hasattr(sys, "setdefaultencoding"):
del sys.setdefaultencoding
main()  #在模块中自动调用该函数

先了解setencoding():设置了默认编码为ASCII  encoding = "ascii"

def setencoding():
"""Set the string encoding used by the Unicode implementation. The
default is 'ascii', but if you're willing to experiment, you can
change this."""
encoding = "ascii" # Default value set by _PyUnicode_Init()
if :
# Enable to support locale aware default string encodings.
import locale
loc = locale.getdefaultlocale()
if loc[]:
encoding = loc[]
if :
# Enable to switch off string to Unicode coercion and implicit
# Unicode to string conversion.
encoding = "undefined"
if encoding != "ascii":
# On Non-Unicode builds this will raise an AttributeError...
sys.setdefaultencoding(encoding) # Needs Python Unicode build !

可以看到默认文件编码是ASCII编码

也可以使用sys模块中getdefaultencoding()获取默认编码

print(sys.getdefaultencoding())#ascii

重点:

if hasattr(sys, "setdefaultencoding"):
del sys.setdefaultencoding

因为这个site.py每次启动python解释器时会自动加载,所以main函数每次都会被执行,setdefaultencoding函数一出来就已经被删除了。

所以通过import引用进来时其实已经没有了,所以必须reload一次sys模块,这样setdefaultencoding才会为可用,才能在代码里修改解释器当前的字符编码。

当没有使用reload时:会无法找到setdefaultencoding该函数

#AttributeError: 'module' object has no attribute 'setdefaultencoding'

所有要想在项目中设置编码:

需要在启动文件manage.py中设置:

if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "admin.settings")
   reload(sys)
   sys.setdefaultencoding('utf-8')

之后就可以在项目中肆无忌惮的使用中文了

补充:使用的是python2.7  Django1.11.11

对于低版本Django1.8,使用过发现上面的reload和setdefaultencoding可以修改项目编码为utf-8,但是中文依旧显示不了

python---补充django中文报错(2),Django3.5出错

python---补充django中文报错(1),Django2.7使用sys.setdefaultencoding('utf-8'),以及使用reload(sys)原因的更多相关文章

  1. python---补充django中文报错(2),Django3.5出错

    今天是要Django3.5设置项目,结果出现中文报错,虽然之前分析过py2.7的报错原因,但是在py3之后reload不在使用,需要引入: from importlib import reload 但 ...

  2. 解决python代码中含有中文报错

    python中写入中文时报错如下图所示: 依照网上解决方法:在py文件中加入:#encoding=utf-8 然后继续报错如下图所示: 解决方法: 在py文件中加入: import sysreload ...

  3. Django:报错 raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc)

    Django 执行迁移生成表: python manage.py migrate 报错: raise MigrationSchemaMissing("Unable to create the ...

  4. Pycharm中不支持中文编码的解决方案。Pycharm中文报错。 Pycharm出现的部分快捷键无效及解决办法

    Pycharm中不支持中文编码的解决方案.Pycharm中文报错. 1. 打开Pycharm ---->  File ----> Default setting ------> Ed ...

  5. Python中常见的报错名称

    Python中常见的报错名称 1.SyntaxError 语法错误.看看是否用Python关键字命名变量,有没有使用中文符号,运算符.逻辑运算符等符号是不是使用不规范. 2.IndentationEr ...

  6. QT笔记之解决QT5.2.0和VS2012中文乱码 以及在Qt Creator中文报错

    转载:http://bbs.csdn.net/topics/390750169 VS2012 中文乱码 1.方法一: 包含头文件 #include <QTextCodec> ....... ...

  7. Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED

    Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED 问题描述 使用pip按照virtualenv报错,如下: pip install virtua ...

  8. 解决cookies存储中文报错问题

    URLEncoder.encode("username", "UTF-8"); URLDecoder.decode("123", " ...

  9. ORA-00911: invalid character 包含中文报错

    SQL在pl下正常执行在vs里报错ORA-00911: invalid character. 1.检查SQL末尾是否含有";" 去掉 2.sql包含中文报错 string sql ...

随机推荐

  1. Jq_打印

     利用IE自带的WebBrowser进行打印  打印判断: if(factory.object)//打印设置的判断 factory.printing.PageSetup(); else alert(& ...

  2. docker之容器数据持久化

    1.挂载本地目录为容器的数据存放目录 [root@node03 ~]# docker run -itd --name web01 -v /container_data/web:/data ubuntu ...

  3. python3解析网页经过base64编码后的图片

    有时候我们打开网页看到的图片不是普通的url,例如:www.baidu.com/static/2.jpg,而是经过base64方式加密过的路径:例如:data:img/jpg;base64,/9j/4 ...

  4. manjaro设置国内源

    升级系统到最新 sudo pacman -Syyu 配置源 kate /etc/pacman.conf 官方镜像源(包括 core, extra, community, multilib ) sudo ...

  5. 分布式理论:深入浅出Paxos算法

    前言 Paxos算法是用来解决分布式系统中,如何就某个值达成一致的算法.它晦涩难懂的程度完全可以跟它的重要程度相匹敌.目前关于paxos算法的介绍已经非常多,但大多数是和稀泥式的人云亦云,却很少有人能 ...

  6. POW的重力之美

    定律一:每一个UTXO都保持其状不变,直到有外力迫使它改变这种状态为止--艾萨克•牛顿,原理2.0 在过去的几年里,关于比特币的工作量证明(PoW)所造成的"巨大的能源浪费"已经被 ...

  7. uc浏览器app点评

    uc浏览器app我经常用,是我接触的第一款手机浏览器,感觉还不错的,uc浏览器新闻更新速度有点慢,有时候还闪退,以前在搜索栏粘贴文字后,如果想改后面的文字,根本就不行,用uc浏览器下东西速度比较慢,现 ...

  8. Spring学习总结之高级装配

    1.  profile profile可以决定bean在什么环境下才被装配(开发环境.测试环境.线上环境等) @Profile(“dev”)可以用在class之前,也可以用在类之前(Spring3.2 ...

  9. 软件工程团队项目第一次Sprint评审

    第一组:9-652 作品:炸弹人 评价:已经完成了界面的设计和基本功能,游戏已初具雏形.这款游戏可玩性很强,是个很不错的项目.但是对游戏并没有进行深入开发,不能持续的吸引玩家的兴趣,容易引起玩家的厌倦 ...

  10. 浅谈个人对存储区域网络SAN的理解

    存储区域网络SAN,是一种通过将网络存储设备和服务器连接起来的网络,提供计算机和存储设备间的数据传输.其中,SAN是独立于服务器系统之外的,拥有近乎无限的存储能力,通过利用光纤作为传输媒介,实现了高速 ...