本站首页    管理页面    写新日志    退出


«October 2025»
1234
567891011
12131415161718
19202122232425
262728293031


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7625572
建立时间:2006年5月29日




[Django]simpleJson的一个封装
软件技术

lhwork 发表于 2007/2/1 21:10:11

今天在调试 jElement.js (我用jQuery做的一个使用js生成Form的类)时,发现汉字返回有问题,是乱码,后来发现是simpleJson把utf-8编码的字符串直接转 成了unicode,但却是按字节来转的,不是真正的unicode。看来使用simpleJson时要小心,一定要转为unicode后再传给它。可是 这样很不方便,因此我写了一段小程序,可以自动判断要处理的数据,包括:普通字符串,Unicode字符串,List,Tuple(自动转为List), 字典,它可以根据情况来进行递归处理,直到将所有的字符串都转为Unicode。而且还将HttpResponse给封装进去了,这样可以直接在View 中返回了。代码为:from django.http import HttpResponsefrom django.utils import simplejsonfrom django.conf import settingsdef json(data):    encode = settings.DEFAULT_CHARSET    return HttpResponse(simplejson.dumps(uni_str(data, encode)))def uni_str(a, encoding):    if isinstance(a, (list, tuple)):        s = []        for i, k in enumerate(a):            s.append(uni_str(k, encoding))        return s    elif isinstance(a, dict):        s = {}        for i, k in enumerate(a.items()):            key, value = k            s[uni_str(key, encoding)] = uni_str(value, encoding)        return s#    elif isinstance(a, str):#        return unicode(a, encoding)    elif isinstance(a, str) or (hasattr(a, '__str__') and callable(getattr(a, '__str__'))):        if getattr(a, '__str__'):            a = str(a)        return unicode(a, encoding)    elif isinstance(a, unicode):        return a    else:        return a使用如:import Ajaxdef index(request):    return Ajax.json(data)请注意,为了发贴我将所有花括号都替换成了全角字符,如想使用请自行转换。Update 2006/09/20: 在使用Django时,发现对于翻译出来的字符串,isinstance不正确,因此增加了判断对象是否存在一个__str__方法的处理,这样就基本上没有问题了。没有增加对__unicode__的处理,一般都不定义这个方法。


阅读全文(3011) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144786982 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号