- 论坛徽章:
- 0
|
哈哈, 开心阿, 问题自己解决了;
做个记录备忘 .. ^-^ 以后不记得的时候回来看看 ..
用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 申明 <meta 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')
问题解决 |
|