django的json返回值带有汉字的处理

原因:simpleJson把utf-8编码的字符串直接转成了unicode,但却是按字节来转的,不是真正的unicode

下面是转化为unicode的代码

    from django.http import HttpResponse
    from django.utils import simplejson
    from django.conf import settings

    def 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) 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

 引用:http://blog.donews.com/limodou/archive/2006/09/14/1037959.aspx

posted @ 2013-03-28 12:01  玉伽  阅读(1835)  评论(0编辑  收藏  举报