python---补充django中文报错(1),Django2.7使用sys.setdefaultencoding('utf-8'),以及使用reload(sys)原因
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)原因的更多相关文章
- python---补充django中文报错(2),Django3.5出错
今天是要Django3.5设置项目,结果出现中文报错,虽然之前分析过py2.7的报错原因,但是在py3之后reload不在使用,需要引入: from importlib import reload 但 ...
- 解决python代码中含有中文报错
python中写入中文时报错如下图所示: 依照网上解决方法:在py文件中加入:#encoding=utf-8 然后继续报错如下图所示: 解决方法: 在py文件中加入: import sysreload ...
- Django:报错 raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc)
Django 执行迁移生成表: python manage.py migrate 报错: raise MigrationSchemaMissing("Unable to create the ...
- Pycharm中不支持中文编码的解决方案。Pycharm中文报错。 Pycharm出现的部分快捷键无效及解决办法
Pycharm中不支持中文编码的解决方案.Pycharm中文报错. 1. 打开Pycharm ----> File ----> Default setting ------> Ed ...
- Python中常见的报错名称
Python中常见的报错名称 1.SyntaxError 语法错误.看看是否用Python关键字命名变量,有没有使用中文符号,运算符.逻辑运算符等符号是不是使用不规范. 2.IndentationEr ...
- QT笔记之解决QT5.2.0和VS2012中文乱码 以及在Qt Creator中文报错
转载:http://bbs.csdn.net/topics/390750169 VS2012 中文乱码 1.方法一: 包含头文件 #include <QTextCodec> ....... ...
- Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED
Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED 问题描述 使用pip按照virtualenv报错,如下: pip install virtua ...
- 解决cookies存储中文报错问题
URLEncoder.encode("username", "UTF-8"); URLDecoder.decode("123", " ...
- ORA-00911: invalid character 包含中文报错
SQL在pl下正常执行在vs里报错ORA-00911: invalid character. 1.检查SQL末尾是否含有";" 去掉 2.sql包含中文报错 string sql ...
随机推荐
- effective c++ 笔记 (13-17)
//---------------------------15/03/30---------------------------- //#13 以对象管理资源 { void f() { Inves ...
- kafka0.8--0.11各个版本特性预览介绍
kafka-0.8.2 新特性 producer不再区分同步(sync)和异步方式(async),所有的请求以异步方式发送,这样提升了客户端效率.producer请求会返回一个应答对象,包括偏移量或者 ...
- 初级字典树查找在 Emoji、关键字检索上的运用 Part-2
系列索引 Unicode 与 Emoji 字典树 TrieTree 与性能测试 生产实践 在有了 Unicode 和 Emoji 的知识准备后,本文进入编码环节. 我们知道 Emoji 是 Unico ...
- ansible自动化工具安装和简单使用
ansible自动化工具安装和简单使用 1.安装 ansible依赖于Python 2.6或更高的版本.paramiko.PyYAML及Jinja2. 2.1 编译安装 解决依赖关系 # yum -y ...
- Hadoop框架
1.Hadoop的整体框架 Hadoop由HDFS.MapReduce.HBase.Hive和ZooKeeper等成员组成,其中最基础最重要元素为底层用于存储集群中所有存储节点文件的文件系统HDFS( ...
- Linux shell (6)
1.linux shell函数: 将一组命令集或语句形成一个可用的块,这些语句块成为函数. 2.shell 函数的组成: 函数名:函数的名字,注意一个脚本中函数名要唯一,否则会引起调用函数紊乱 函 ...
- 如何使用URLOS进行docker应用开发
使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力.在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如今在微服务架构越来越流行的情况下,微服务+Docker的完 ...
- 微软职位内部推荐-Senior Program Manager
微软近期Open的职位: Title: Senior Program Manager – Bing Multimedia Relevance Group: Search Technology Cent ...
- Linux内核分析 NO.3
跟踪分析Linux内核的启动过程 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002 ...
- 第二个Sprint冲刺第 八天(燃尽图)
因为今天停电了,所以我们也休息一天!