django項目運行因中文而亂碼報錯的幾種情況解決
前言
django項目開發(fā)過程中,碰到了多種情況下的中文亂碼報錯,在這兒做一下處理總結(jié)。
報錯:UnicodeEncodeError: 'ascii' codec can't encode characters in position x-x: ordinal not in range(128)
1.因代碼中的中文注釋問題的報錯
django項目的.py文件文件中加入了中文注釋,經(jīng)常會因此報錯而導致無法運行,究其原因是編碼的問題,最后的解決辦法是直接在有中文注釋的.py文件的頂部加上:
# -*-coding:utf-8 -*-
2.運行過程中的中文亂碼的報錯
首先確保連接的數(shù)據(jù)庫的基礎(chǔ)設置是utf-8:
然后確認django項目中的網(wǎng)頁頭部設置編碼為utf-8,網(wǎng)頁頭部加上代碼:
<meta charset="utf-8">
最后仍然報錯就是因為django項目中我們沒有指明編碼方式,所以按照默認設置來,而非正常的utf-8,為:
所以項目最后需要在進行編碼操作的地方,或者直接在settings.py中加入:
import sys reload(sys) sys.setdefaultencoding('utf-8')
3.項目配置在debian系統(tǒng)中,F(xiàn)ileField字段在admin中因中文文件名上傳報錯
在一個django項目中發(fā)現(xiàn),在本地windows測試環(huán)境中,django admin的文件上傳功能毫無障礙,可是當項目布置在debian環(huán)境中時,中文文件名的文件在admin中無法上傳,并且報中文亂碼的錯,該錯誤的主要原因來自系統(tǒng)編碼問題,該debian系統(tǒng)中未設置系統(tǒng)編碼語言,均為默認設置,導致所布置的項目無法正常運行,解決如下:
(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重啟服務器,查看系統(tǒng)編碼,UTF-8中文生效,locale命令可以直接查看系統(tǒng)編碼設置,此時再運行django項目上傳中文名文件無誤。
附:django郵件亂碼解決方案
python中有email.meeesage 和 email.header 對郵件中的非ASCII進行處理, 因此需要對sendMail函數(shù)中的參數(shù)進行如下處理:
# 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對象處理發(fā)件人亂碼
b、用Header對象處理主題亂碼
c、用Message對象處理正文亂碼
這里統(tǒng)一采用utf8編碼
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Pycharm中切換pytorch的環(huán)境和配置的教程詳解
這篇文章主要介紹了Pycharm中切換pytorch的環(huán)境和配置,本文給大家介紹的非常詳細,對大家的工作或?qū)W習具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03Python importlib動態(tài)導入模塊實現(xiàn)代碼
這篇文章主要介紹了Python importlib動態(tài)導入模塊實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04手把手教你搭建python+selenium自動化環(huán)境(圖文)
本文主要介紹了手把手教你搭建python+selenium自動化環(huán)境,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-06-06Python實現(xiàn)類似jQuery使用中的鏈式調(diào)用的示例
chained calls鏈式調(diào)用其實多是指一種方法鏈的程序?qū)懛?這里我們來看一下Python實現(xiàn)類似jQuery使用中的鏈式調(diào)用的示例,首先說明一下什么是鏈式調(diào)用:2016-06-06