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ù)庫(kù)的基礎(chǔ)設(shè)置是utf-8:
然后確認(rèn)django項(xiàng)目中的網(wǎng)頁(yè)頭部設(shè)置編碼為utf-8,網(wǎng)頁(yè)頭部加上代碼:
<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é)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Pycharm中切換pytorch的環(huán)境和配置的教程詳解
這篇文章主要介紹了Pycharm中切換pytorch的環(huán)境和配置,本文給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03Python importlib動(dòng)態(tài)導(dǎo)入模塊實(shí)現(xiàn)代碼
這篇文章主要介紹了Python importlib動(dòng)態(tài)導(dǎo)入模塊實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04手把手教你搭建python+selenium自動(dòng)化環(huán)境(圖文)
本文主要介紹了手把手教你搭建python+selenium自動(dòng)化環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06Python實(shí)現(xiàn)類似jQuery使用中的鏈?zhǔn)秸{(diào)用的示例
chained calls鏈?zhǔn)秸{(diào)用其實(shí)多是指一種方法鏈的程序?qū)懛?這里我們來看一下Python實(shí)現(xiàn)類似jQuery使用中的鏈?zhǔn)秸{(diào)用的示例,首先說明一下什么是鏈?zhǔn)秸{(diào)用:2016-06-06