Django1 0 與中文編碼問題 一

2021-04-20 03:57:01 字數 1928 閱讀 6905

1. 資料庫字元編碼

確保資料庫能儲存任何資料格式, 一般我們選用utf-8. 選用其他資料格式的話如亞洲地區比較常用的latin1,會有些字元不能儲存,導致資訊丟失!(從一定意義上來說使用latin1是導致很多奇怪的字元編碼問題的罪魁禍首)所以推薦大家建立資料庫是選用utf8格式,為latin1受的苦還不夠嗎 :<

在mysql中我們使用以下方式建立乙個utf8字符集的資料庫:

create database database_name default character set utf8 collate utf8_general_ci;

與資料庫通訊時,django內部把unicode轉換成正確的編碼格式,同時也自動地把從資料庫獲取到的字串轉換為unicode格式。你甚至不需要告訴django 你的資料庫使用什麼編碼方式, 對使用者來說,這一切都是透明的。

2. default_charset

起名為default_charset實在是對開發人員乙個大大的誤導,從一定程度上來說,它並不是什麼default charset,不要愚蠢的以為只要你設定了default_charset ,django就會如你所願循規蹈矩的工作了。 字串自身並沒有攜帶足夠的資訊來告訴我們它使用了什麼編碼格式,所以在迷茫的時候面臨抉擇的時候django還是會自作主張的使用utf-8作為編碼格式。 django的哲學認為, default_charset是由客戶程式設計師或者直接的終端客戶來設定的, 不管他們選擇什麼編碼格式,程式還得繼續工作呀, (起碼不能丟擲乙個什麼unicodeencodeerror之類的異常吧) 為了一**竟,我們來看看django到底在哪些地方使用了default_charset

發現了兩個檔案,有心的讀者可以自己研讀一下詳細**。 很明顯, 它只作用於http通訊和郵件資料通訊。 在接收http請求時, 將瀏覽器傳送過來的資料轉換為unicode, 在傳送http響應時將django內部資料編碼為default_charset格式並設定頁面字符集為default_charset(django預設設定為utf-8)。

3. file_charset

這是django1.0中新增的乙個配置,同樣我們還是先看一下它在**被使用到

$ grep file_charset ./* -r

./django/core/management/sql.py

表明file_charset只是用於模板載入和讀取sql初始化檔案是用到。django將使用file_charset來對頁面模板檔案和sql初始化檔案進行解析。

django把file_charset預設設定為utf-8

4. 頁面字符集

瀏覽器根據頁面字符集度html頁面進行解析, 推薦大家在httpresponse的時候進行設定

content-type: text/html; charset=iso-8859-1

其次才是直接在html文件中進行設定:

5. 定義程式編碼

語法格式: # -*- coding:utf-8

-*-

編碼宣告只能在在程式的第一行或第二行,以上只是習慣寫法,也推薦大家這麼寫。 python內部通過正規表示式"coding[:=]/s*([-/w.]+)"來獲取程式編碼

編碼資訊被python語法分析器用來解釋程式源**檔案) 在沒有明確指定的情況下, 它使用系統預設的codec對原始碼檔案進行轉換

source_code.decode(sys.sys.getdefaultencoding())

允許非ascii編碼的字串和注釋行, 在沒有什麼編碼格式的情況下,python內部將它當作iso-8859-1格式進行轉換對於 unix/linux系統來說,系統的預設codec是ascii, 所以如果程式中包含非ascii字元,請定義好**格式。

公升級到Django 1 0遇到的問題與解決

從django 0.97svn版本公升級到django 1.0,在本地程式執行和除錯都很順利,但發布到linux伺服器上卻出現了500 伺服器內部錯誤 頁面,查了日誌檔案,也看不到任何錯誤資訊。採用的排錯手法是先將應用最小化,就是把應用縮小成只有乙個主頁面,其他程式先拿掉。測試了一下能跑了。然後逐個...

django10 使用自定義標籤配置說明

2 mytags.py 在templatetags下建乙個mytags.py,新增 from django import template register template.library 新增乙個函式,用於html頁面呼叫。例如 import re time datetime,os,sys fr...

django10 使用自定義標籤配置說明

2 mytags.py 在templatetags下建乙個mytags.py,新增 from django import template register template.library 新增乙個函式,用於html頁面呼叫。例如 import re time datetime,os,sys fr...