免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 22313 | 回复: 5
打印 上一主题 下一主题

Django 中文编码又出错,出错信息:'latin-1' codec can't encode characters... [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-23 17:21 |只看该作者 |倒序浏览
我以为我理解了, 实际上还是不明白 .. :em11:

django+ mysql   提交汉字到mysql 出错 ..

mysql 为utf-8

网页保存也是utf-8
<META http-equiv=Content-Type content="text/html; charset=utf-8">

程序头也用了
#!/usr/bin/python
#coding=utf-8

import sys
reload(sys)
sys.setdefaultencoding('utf8')

连接数据库的时候也用了
cursor.execute('set names utf8')

还是出错..  NND

  1. UnicodeEncodeError at /
  2. 'latin-1' codec can't encode characters in position 31-32: ordinal not in range(256)

  3. 41. cursor.execute(sql) ...
  4. /usr/lib/python2.4/site-packages/MySQLdb/cursors.py in execute
  5. 146. query = query.encode(charset)
复制代码

论坛徽章:
0
2 [报告]
发表于 2008-11-23 17:23 |只看该作者
不能更改cursors.py里面的execute
      def execute(self, query, char="utf-8", args=None):

改了之后 中文问题是能解决, 但是我要用session ,  

更改了cursosr.py 之后
运行命令 manage.py syncdb  报错




我还能怎么做, 救命阿 ..  

[ 本帖最后由 猫搂鱼睡觉 于 2008-11-23 17:27 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-11-24 10:03 |只看该作者
建数据库用utf8格式,py文件也保持为utf8格式。

论坛徽章:
0
4 [报告]
发表于 2008-11-24 11:58 |只看该作者
原帖由 guotie 于 2008-11-24 10:03 发表
建数据库用utf8格式,py文件也保持为utf8格式。


我帖子上已经说明了. , 我已经是这样做的了

论坛徽章:
0
5 [报告]
发表于 2008-11-24 12:32 |只看该作者
哈哈, 开心阿, 问题自己解决了;
做个记录备忘  .. ^-^  以后不记得的时候回来看看 ..

用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')
问题解决

论坛徽章:
0
6 [报告]
发表于 2008-11-24 14:00 |只看该作者
中文编码的问题的确很烦。

我现在也是处处小心。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP