django項(xiàng)目運(yùn)行因中文而亂碼報(bào)錯(cuò)的幾種情況解決
前言
django項(xiàng)目開發(fā)過程中,碰到了多種情況下的中文亂碼報(bào)錯(cuò),在這兒做一下處理總結(jié)。
報(bào)錯(cuò):UnicodeEncodeError: 'ascii' codec can't encode characters in position x-x: ordinal not in range(128)
1.因代碼中的中文注釋問題的報(bào)錯(cuò)
django項(xiàng)目的.py文件文件中加入了中文注釋,經(jīng)常會(huì)因此報(bào)錯(cuò)而導(dǎo)致無法運(yùn)行,究其原因是編碼的問題,最后的解決辦法是直接在有中文注釋的.py文件的頂部加上:
# -*-coding:utf-8 -*-
2.運(yùn)行過程中的中文亂碼的報(bào)錯(cuò)
首先確保連接的數(shù)據(jù)庫的基礎(chǔ)設(shè)置是utf-8:

然后確認(rèn)django項(xiàng)目中的網(wǎng)頁頭部設(shè)置編碼為utf-8,網(wǎng)頁頭部加上代碼:
<meta charset="utf-8">
最后仍然報(bào)錯(cuò)就是因?yàn)閐jango項(xiàng)目中我們沒有指明編碼方式,所以按照默認(rèn)設(shè)置來,而非正常的utf-8,為:

所以項(xiàng)目最后需要在進(jìn)行編碼操作的地方,或者直接在settings.py中加入:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
3.項(xiàng)目配置在debian系統(tǒng)中,F(xiàn)ileField字段在admin中因中文文件名上傳報(bào)錯(cuò)
在一個(gè)django項(xiàng)目中發(fā)現(xiàn),在本地windows測(cè)試環(huán)境中,django admin的文件上傳功能毫無障礙,可是當(dāng)項(xiàng)目布置在debian環(huán)境中時(shí),中文文件名的文件在admin中無法上傳,并且報(bào)中文亂碼的錯(cuò),該錯(cuò)誤的主要原因來自系統(tǒng)編碼問題,該debian系統(tǒng)中未設(shè)置系統(tǒng)編碼語言,均為默認(rèn)設(shè)置,導(dǎo)致所布置的項(xiàng)目無法正常運(yùn)行,解決如下:
(1).終端中操作安裝locales
apt-get install locales
(2).重新選擇字符編碼
dpkg-reconfigure locales
(3).空格選擇所有zh_開頭的字符編碼,OK確認(rèn)下一步,選擇中文UTF-8



(4).debian里需要在~/.bashrc里面最下面加入export LC_ALL=zh_CN.UTF-8或者直接運(yùn)行export LANG=zh_CN.UTF-8
(5).最后直接reboot重啟服務(wù)器,查看系統(tǒng)編碼,UTF-8中文生效,locale命令可以直接查看系統(tǒng)編碼設(shè)置,此時(shí)再運(yùn)行django項(xiàng)目上傳中文名文件無誤。
附:django郵件亂碼解決方案
python中有email.meeesage 和 email.header 對(duì)郵件中的非ASCII進(jìn)行處理, 因此需要對(duì)sendMail函數(shù)中的參數(shù)進(jìn)行如下處理:
# coding=utf8
from email.message import Message
from email.header import Header
mail_from=Header('友好互動(dòng)', 'utf8') + "god_chen@sina.com"#a**************
mail_to="god_chen@sina.com"
mail_subj=Header("測(cè)試","utf8")#b***************
mail_content='\r\n<div>測(cè)試測(cè)試郵件</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對(duì)象處理發(fā)件人亂碼
b、用Header對(duì)象處理主題亂碼
c、用Message對(duì)象處理正文亂碼
這里統(tǒng)一采用utf8編碼
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Python控制臺(tái)輸出俄羅斯方塊移動(dòng)和旋轉(zhuǎn)功能
這篇文章主要介紹了Python控制臺(tái)輸出俄羅斯方塊移動(dòng)和旋轉(zhuǎn)功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
python字典翻轉(zhuǎn)的實(shí)現(xiàn)
本文主要介紹了python字典翻轉(zhuǎn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
Django實(shí)現(xiàn)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Django實(shí)現(xiàn)學(xué)生管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02
python實(shí)現(xiàn)隨機(jī)梯度下降(SGD)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)隨機(jī)梯度下降SGD,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
淺析python實(shí)現(xiàn)動(dòng)態(tài)規(guī)劃背包問題
這篇文章主要介紹了python實(shí)現(xiàn)動(dòng)態(tài)規(guī)劃背包問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
django日志默認(rèn)打印request請(qǐng)求信息的方法示例
這篇文章主要給大家介紹了關(guān)于django日志默認(rèn)打印request請(qǐng)求信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05

