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 ...
随机推荐
- [CF1083D]The Fair Nut’s getting crazy[单调栈+线段树]
题意 给定一个长度为 \(n\) 的序列 \(\{a_i\}\).你需要从该序列中选出两个非空的子段,这两个子段满足 两个子段非包含关系. 两个子段存在交. 位于两个子段交中的元素在每个子段中只能出现 ...
- Microsoft Dynamics CRM 常用JS语法(已转成vs2017语法提示)
背景 最近接触到Microsoft Dynamics CRM的开发.前端js是必不可少的部分,奈何没有一个语法提示,点不出来后续的语句. 在vscode上面搜索插件的时候发现,有一个大神写的插件htt ...
- centos7 源码部署LNMP
一.环境 系统环境:centos 7.4 64位 Nginx:1.7.9 MySQL: 5.7.20 (二进制包) PHP:5.6.37 二.Ngin 安装 Nginx部署 yum install ...
- Python读取ini配置文件封装方法
读取配置文件 ----rw_ini.py from configparser import ConfigParser def read_config(config_file_path:str): &q ...
- DRF03
为了方便接下来的操作,需要在admin站点创建一个管理员. python manage.py createsuperuser 可在setting.py中修改admin站点语言, LANGUAGE_CO ...
- sqlserver-表分区
最近对公司数据库性能方面改造.现已初建成效. 公司原先数据库问题颇多,简单列举下: 1.数据表文档缺失. 2.数据库900多张表,接近一半都是备份和一些报表,没有分库处理 3.大数量的表按照年份人工导 ...
- Notes of Daily Scrum Meeting(12.8)
今日团队任务总结: 团队成员 今日团队工作 陈少杰 使用例子对json数据进行解析 王迪 确定搜索功能的接口 金鑫 对布局文件进行协助修改 雷元勇 开始进行搜索功能的代码实现 高孟烨 按照学长的样本对 ...
- LeetCode 88. 合并两个有序数组
题目: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...
- 冲刺Two之站立会议4
在完成了对主界面的设计之后,我们对自己的聊天室界面进行了优化,添加了一些标签和图片按钮等组件让界面更加美观一些.然后还查询了一些关于改进视频和音频质量的资料,准备开展相关工作.
- 第三周(JAVA编写的 wordcount)
import java.io.*; public class WordCount { public static int words=1; public static int lines=1; pub ...