django项目运行因中文而乱码报错的几种情况解决

前言

django项目开发过程中,碰到了多种情况下的中文乱码报错,在这儿做一下处理总结。

报错:UnicodeEncodeError: 'ascii' codec can't encode characters in position x-x: ordinal not in range(128)

1.因代码中的中文注释问题的报错

django项目的.py文件文件中加入了中文注释,经常会因此报错而导致无法运行,究其原因是编码的问题,最后的解决办法是直接在有中文注释的.py文件的顶部加上:

# -*-coding:utf-8 -*-

2.运行过程中的中文乱码的报错

首先确保连接的数据库的基础设置是utf-8:

然后确认django项目中的网页头部设置编码为utf-8,网页头部加上代码:

<meta charset="utf-8">

最后仍然报错就是因为django项目中我们没有指明编码方式,所以按照默认设置来,而非正常的utf-8,为:

所以项目最后需要在进行编码操作的地方,或者直接在settings.py中加入:

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

3.项目配置在debian系统中,FileField字段在admin中因中文文件名上传报错

在一个django项目中发现,在本地windows测试环境中,django admin的文件上传功能毫无障碍,可是当项目布置在debian环境中时,中文文件名的文件在admin中无法上传,并且报中文乱码的错,该错误的主要原因来自系统编码问题,该debian系统中未设置系统编码语言,均为默认设置,导致所布置的项目无法正常运行,解决如下:

(1).终端中操作安装locales

apt-get install locales

(2).重新选择字符编码

dpkg-reconfigure locales

(3).空格选择所有zh_开头的字符编码,OK确认下一步,选择中文UTF-8

(4).debian里需要在~/.bashrc里面最下面加入export LC_ALL=zh_CN.UTF-8或者直接运行export LANG=zh_CN.UTF-8

(5).最后直接reboot重启服务器,查看系统编码,UTF-8中文生效,locale命令可以直接查看系统编码设置,此时再运行django项目上传中文名文件无误。

附:django邮件乱码解决方案

python中有email.meeesage 和 email.header 对邮件中的非ASCII进行处理, 因此需要对sendMail函数中的参数进行如下处理:

# coding=utf8
from email.message import Message
from email.header import Header 

mail_from=Header('友好互动', 'utf8') + "god_chen@sina.com"#a**************
mail_to="god_chen@sina.com"
mail_subj=Header("测试","utf8")#b***************
mail_content='\r\n<div>测试测试邮件</div>\r\n<a href="www.61pad.com">儿童派</a>' 

msg=Message()
msg['Mime-Version']='1.0'
msg['Content-type']='text/html'
msg['From']=mail_from
msg['To']=mail_to
msg['Subject']=mail_subj
msg.set_payload(mail_content,'utf8')#c************** 

server=connect(sm_host, sm_port, sm_user, sm_password)
server.sendmail(mail_from, mail_to, msg.as_string())
server.close() 

def connect(host,port,user,password):
  "connect server"
  server=smtplib.SMTP()
  server.connect(host, port)
  server.login(user, password)
  return server 

注:

a、用Header对象处理发件人乱码

b、用Header对象处理主题乱码

c、用Message对象处理正文乱码

这里统一采用utf8编码

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • django模型中的字段和model名显示为中文小技巧分享

    简单方法: models.py 复制代码 代码如下: class IceCreamBar(models.Model):     title = models.CharField(max_length=200,db_index=True,verbose_name="名称")         shell = models.CharField(max_length=100,verbose_name='外皮')         filling = models.CharField(max_le

  • django项目运行因中文而乱码报错的几种情况解决

    前言 django项目开发过程中,碰到了多种情况下的中文乱码报错,在这儿做一下处理总结. 报错:UnicodeEncodeError: 'ascii' codec can't encode characters in position x-x: ordinal not in range(128) 1.因代码中的中文注释问题的报错 django项目的.py文件文件中加入了中文注释,经常会因此报错而导致无法运行,究其原因是编码的问题,最后的解决办法是直接在有中文注释的.py文件的顶部加上: # -*

  • vue3+vite项目中按需引入vant报错:Failed to resolve import的解决方案

    目录 问题描述 原因分析 解决方案 总结 问题描述 近日尝试使用vite+vue3+vant开发项目过程中,参考vant官网开发指南->快速上手->引入组件 按照上述配置好后,运行vite环境报错:Failed to resolve import 原因分析 根据报错信息,发现是vant的样式引入路径不对. 程序解析为:项目路径/node_modules/vant/lib/vant/es/组件/style 实际应该是:项目路径/node_modules/vant/lib/ vant/es/组件/

  • Springboot项目因为kackson版本问题启动报错解决方案

    问题现象 org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat     at org.springframew

  • VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决

    问题现象 项目使用vue/cli3脚手架搭建的前端项目,vue版本为2.6.10. browserslist的配置如下: [ "> 1%", "last 2 versions"] 但开发环境的IE11打开显示白屏,F12打开显示: 分析过程 5306行显示 "./node_modules/_debug@4.1.1@debug/src/browser.js"这个路径报错,由于eval()包含的代码中有ES6的语法,IE不支持,查了网上很多资料

  • springboot新建项目pom.xml文件第一行报错的解决

    目录 springboot新建项目pom.xml文件第一行报错 新建一个测试项目 下面是文件 解决这个问题只需要 springboot创建过程中pom.xml报错 问题出现原因 解决办法 springboot新建项目pom.xml文件第一行报错 新建一个测试项目 发现创建完毕pom.xml文件报错,提示 Description Resource Path Location Type Unknown pom.xml /demo line 1 Maven Configuration Problem

  • vue-cli创建项目时由esLint校验导致报错或警告的问题及解决

    目录 vue-cli创建项目时由esLint校验导致报错或警告 eslint语法限制项目报错解决 vue-cli创建项目时由esLint校验导致报错或警告 vue-cli创建项目后编写代码控制台一片黄 但不影响代码执行 但是看着就是很不爽啊 到网上搜索了一下这个问题,想起来初始化项目时安装了esLint校验工具 嗯,我看到了很多办法都是下面这样的 1.因为你设置了eslint,如果你不想有规范的js代码,可以重新初始化关掉eslint. Use ESLint to lint your code?

  • 如何监听Vue项目报错的4种方式 

    目录 背景 onerror element.onerror errorHandler errorCaptured error传播规则(划重点) 如何监听异步错误 总结 背景 在开发Vue项目时,使用浏览器调试可以比较清晰的看到报的什么错.在哪报错,或者使用console.log()打印出报错信息,以便快速定位到报错源头并解决,但是如果项目上线了又怎么查看呢.对于上线项目来说,一般都是会有代码混淆以及禁用console.log(),这个时候再使用浏览器调试就有点不太方便了.另一种场景,如果要做一个

  • idea springBoot项目自动注入mapper为空报错的解决方法

    在SpringBoot项目中,如果使用了MyBatis作为持久层框架,使用自动注入时可能会遇到mapper报空指针异常的问题.这是因为在自动注入时,SpringBoot无法正确识别MyBatis的Mapper接口,需要进行一些额外的配置.解决这个问题的方法有两种: 1.在Mapper接口上添加注解在Mapper接口上添加@Mapper注解,告诉SpringBoot这个接口是一个Mapper接口,需要进行代理.示例如下: @Mapper public interface UserMapper {

  • python中出现invalid syntax报错的几种原因分析

    目录 出现invalid syntax报错的几种原因 1.符号使用不正确 2.代码缩进问题 invalid syntax——无效语法 错误代码块 调整后代码 出现invalid syntax报错的几种原因 这篇文章旨为刚接触python不久的朋友,提供一点帮助,请在检查代码没有主要问题时再看是否存在以下问题. 一般来说,写完代码运行时,如果代码中有错误,解释器会提示错误信息,按照提示信息,一般很快可以找出错误,进行修改.但也有一些时候错误提示的信息不是那么明确,代码检查了几遍仍找不出问题,就比较

  • npm install安装报错的几种常见情况

    目录 第一种情况: 2.第二种情况 3.第三种情况 4.第四种情况 5.第五种情况 总结 解决办法: 第一种情况: 直接删掉项目中的node_modules文件夹和package-lock.json文件, 然后,执行 npm install 指令重新安装下载依赖库. 最后启动项目即可. 2.第二种情况 当npm install 安装过程卡住不动,在创建项目前,执行这段代码: 第一步:npm config set registry http://registry.cnpmjs.org 第二步:np

随机推荐