您的位置:首页 > 编程语言 > Python开发

python django 中文问题

2011-05-27 15:49 274 查看
之前项目有一个用django开发的简单的admin tool。 现在由于 要加入对中国客户的支持, 所以要有显示与编辑中文。

由于是直接操作数据库, 所以显示没有问题, 但是在编辑的时候, 出现 'ascii' codec can't decode byte 0xe7 in position 20: ordinal not in range(128)的错误。

于是来debug这个问题, django提供了丰富的debug trace。 看到是一个打log的地方出现的问题。

query_string=meta_get('QUERY_STRING')
_log('[%-15s ][%s] %s %s%s' % (domain, account, /
meta_get('REQUEST_METHOD'), /
meta_get('PATH_INFO'),/
query_string))


说是在对query_string进行decode的时候出现错误。

开始在网上google, 有的说是用decode("gbk").encode('utf-8'), 发现不管用

为了 先能work, 用了try...catch...的机制, 如果出现错误就不打印log.

下面是慢慢的找原因了。

其中 Python Unicode与中文处理(文摘)
对python的unicode , utf-8及其他讲解的不错。

然后看到说decode 与encode有第二个参数可以对error进行不同的处理。

于是尝试了一下decode("gbk","ignore").encode("ascii","ignore")发现不报错了, 不过具体的query_string就看不到了。

由于 python默认的编码方式是unicode, 所以在处理string(%s)时候会自动的用unicode来decode, 如果我们指定用自然字符
来处理不知道, 可不可以 。

尝试了一下

_log('[%-15s ][%s] %s %r%r' % (domain, account, /
meta_get('REQUEST_METHOD'), /
meta_get('PATH_INFO'),/
query_string))#.decode('gbk','ignore').encode('ascii','ignore')))


就可以了。

问题解决。

对python 的编码方式也多了一点了解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: