Python Unicode ajax表单发布错误

时间:2010-06-26 01:57:52

标签: python django

我遇到了python的n00b问题,我在这里搜索了一段时间,我找不到合适的解决方案......

我有一个utf8表单,我ajax发布到python页面。我用utf-8字符集阅读了json simplejson。

只要没有混合的utf8和拉丁字符,文本就可以了吗?!;等等......

UnicodeDecodeError:'ascii'编解码器无法解码位置0中的字节0xd7:序号不在范围内(128)

commentjsonarray = simplejson.loads(commentjson, encoding='utf-8')
我尝试了很多东西,但我无法让它发挥作用。 帮助

只是为您提供更多帮助的代码,谢谢

commentjson = request.POST ['commentObj']

commentjsonarray = simplejson.loads(commentjson, encoding='utf-8')
program = get_object(Program, commentjsonarray['programid'])
userget = get_object(User, commentjsonarray['userid'])
#get user avatar from usermeta
usermeta = get_object(UserMeta, 'user_id = ',userget.key())
commenttext = commentjsonarray['walltext']
from django.utils.encoding import smart_unicode,force_unicode,smart_str

commenttext = smart_str(commenttext)

newcomment = db_create(Wall, user_avatarurl=str(usermeta.avatarurlsmall),user_fullname=str(''+userget.first_name+' '+userget.last_name),user_idstring=str(userget.key()),text = str(commenttext) , program_id = program.key() , user_id = userget.key())

上面是python部分。 这是javascript:

var walltext = $('walltext').value

 var commentObj = {"walltext": ""+walltext+"", "programid": programid, "userid": userid};
 var commentJSON = encodeURIComponent(Object.toJSON(commentObj));
if (walltext != '' || walltext == 'type here' || walltext.length > 0) {

    new Ajax.Request('/wall/new', {
        method: 'post',
        encoding: 'UTF-8',
        parameters: 'commentObj=' + commentJSON,
        onSuccess: function(request){
            var msg = request.responseText.evalJSON();
            if (msg) {

                var structure = '<div id="' + msg.msgid + '"><img src="' + msg.avatarurl + '" width="18" height="18"> ' + msg.username + ':' + msg.text + '<div id="frontSepLine"></div></div>';

                //$('programwall').insert({bottom:structure});
                refreshWall(msg.programid);

                $('walltext').value = 'type here';

                var objDiv = document.getElementById("programwall");
                objDiv.scrollTop = objDiv.scrollHeight;


            }



        }
    });

1 个答案:

答案 0 :(得分:1)

你所描述的情况对我来说很好(使用Python 2.6上的标准库json),有或没有显式编码(utf-8编码的字节串不需要,如utf -8是这里的默认值:

>> s = u'{"valá":"macché?!"}'.encode('utf8')
>>> json.loads(s)
{u'val\xe1': u'macch\xe9?!'}
>>> json.loads(s, encoding='utf-8')
{u'val\xe1': u'macch\xe9?!'}

以及simplejson 2.1.1(在2.6上真的多余,但是,哦,好吧; - ):

>>> import simplejson
>>> s = u'{"valá":"macché?!"}'.encode('utf8')
>>> simplejson.loads(s)
{u'val\xe1': u'macch\xe9?!'}
>>> simplejson.loads(s, encoding='utf-8')
{u'val\xe1': u'macch\xe9?!'}

您能更准确地描述您的问题吗?你对错误触发的描述,即“只要没有混合的utf8和latin chars就像?!;等”的反转,不会引起任何问题 - 那么向我们展示最微小的例子< em> 重现你的问题吗?