1
notedit 2013 年 4 月 1 日 不用转gbk request.POST.get('title') 得到的是unicode 直接encode('utf-8')
|
2
feihu OP @notedit 直接encode('utf-8') 还是乱码,django是运行在gunicorn上面的,直接请求的是gunicorn,跟这个有关系吗?
|
6
feihu OP @notedit DEFAULT_CHARSET 指的的是django.config.settings里面的DEFAULT_CHARSET 吗?那个是UTF8
|
9
nkliwenjian 2013 年 4 月 2 日 有没有在sitecustomize.py文件里面写上
import sys sys.setdefaultencoding('utf-8') |
10
feihu OP @nkliwenjian 不可以,我现在的情况是这样的,如果提交的数据是utf8编码的,能正常显示,但是如果提交的是gkb的话,就无法正常显示了,调用 encode解码会报错, 如果在request.POST.get之前指定编码方式为gbk,那么就能正确显示了。但是我觉得在get之前先指定编码方式有一些反人类。所以想找一个方法能在get之后能对字符串进行编码转换。
|
11
nkliwenjian 2013 年 4 月 3 日
没用过gunicorn这个东西,不过可以断定是这个东西引起的。我给你分析一下。正常的浏览器的一个post请求,无论是直接用表单提交的还是用ajax提交的,在网络上传输的时候使用的基本上都是utf-8编码,然后在django这端的话会先把他进行utf-8解码,这样开发人员直接用request.POST拿到的就是unicode的字符串。所以并不存在说“提交的是gbk”,这个压根就是做不到的。
你现在的gunicorn,提交的是gbk,但是在django这里,还是会先utf-8解码,这个解码就虽然不会有异常,但是整个码就错了,所以你后面再操作就错了。所以严格来说你就必须request.setencoding,目的是告诉django,传过来的请求不是utf-8编码的,别瞎解码。 想验证我的猜想是不是对的,很简单,得到request.POST之后,先encode('utf-8'),还原成原始的gbk编码,然后再decode('gbk'),这样应该就对了。 |