1
notedit 2013-04-01 23:46:17 +08:00 1
不用转gbk request.POST.get('title') 得到的是unicode 直接encode('utf-8')
|
2
feihu OP @notedit 直接encode('utf-8') 还是乱码,django是运行在gunicorn上面的,直接请求的是gunicorn,跟这个有关系吗?
|
4
feihu OP @notedit 我打印日志了,在终端中看到是乱码,网页显示也是乱码,如果是改成request.setencoding的话,终端与网页都显示正常
|
6
feihu OP @notedit DEFAULT_CHARSET 指的的是django.config.settings里面的DEFAULT_CHARSET 吗?那个是UTF8
|
7
notedit 2013-04-02 03:44:09 +08:00
@feihu 那这样应该没有问题啊 你什么系统呢 另外检查一下你所有的python文件的编码是不是#encoding:utf-8
|
9
nkliwenjian 2013-04-02 23:08:09 +08:00 1
有没有在sitecustomize.py文件里面写上
import sys sys.setdefaultencoding('utf-8') |
10
feihu OP @nkliwenjian 不可以,我现在的情况是这样的,如果提交的数据是utf8编码的,能正常显示,但是如果提交的是gkb的话,就无法正常显示了,调用 encode解码会报错, 如果在request.POST.get之前指定编码方式为gbk,那么就能正确显示了。但是我觉得在get之前先指定编码方式有一些反人类。所以想找一个方法能在get之后能对字符串进行编码转换。
|
11
nkliwenjian 2013-04-03 14:18:17 +08:00
没用过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'),这样应该就对了。 |