django是一个不错的WEB开源框架。今天测试,发现有些页面中文乱码,肯定是编码哪儿出了问题。django配置要修改settings.
1
2
LANGUAGE_CODE = 'zh-cn'
TIME_ZONE = 'Asia/Shanghai'
还得注意像django模块中的htm,html文件本身编码是不是utf8.
No related posts.
中文报错:
用python + django
+mod_python +mysql 来写程序 , 曾经我被中文编码也搞昏狠了,
看了不下N天的资料文档,google被我翻烂了,不管是中文的还是英文的 ;
后来决定统一编码:
1:python 写的程序, 统一用
utf-8 ,以及重新载入utf-8
#!/usr/bin/python
#coding=utf-8
import sys,os
reload(sys)
sys.setdefaultencoding('utf8')
2: django 的模板,
也就是html程序
统一保存格式为utf-8 , 并且html 申明
http-equiv="Content-Type" content="text/html;
charset=utf-8">
3:Mysql
建立数据库,数据库使用UTF-8
自此问题应该能全部解决 ,
如还出现编码错误,
修改/usr/lib/python2.4/site-packages/MySQLdb/cursors.py
原来是:
charset =
db.character_set_name()
query =
query.encode(charset)
修改为:
query =
query.encode('utf-8')
去掉charset那行
!
//==================================================================================================
总结下我提的那问题:
我前面也是按照1-3那样来做的,
但是再提交中文表单的时候还是出现了错误,
UnicodeEncodeError
at /
'latin-1' codec
can't encode characters ...
然后在网上搜索了很多资料,他们说的基本就是. (搜索的资料再多,但都是同一个人写的, 到处转载来转载去的. 呵呵)
网上说的都是修改cursors.py
127行 , 加上 char="utf-8" ,然后再146行前面再加上charset = char ,修改后的片断为:
def execute(self,
query, char="utf-8", args=None): //127行
.....
charset = char
query =
query.encode(charset)
这样改动是能解决中文问题,
但我在实际中,
因为我在后面要用到session , 执行了manage.py syncdb 生成Session要用的数据库, ..
然后写数据库的时候又开始报错,
encode() argument 1
must be string, not list
Request Method:
GET
Exception Type:
TypeError
Exception Value:
encode() argument 1 must be string, not list
Exception Location:
/usr/lib/python2.4/site-packages/MySQLdb/
cursors.py in
execute, line 146
没人帮我解决问题, 自己解决了..
没有用网上说的,
我直接修改默认的cursors.py
里面的 query = query.encode('utf-8')
问题解决