为了账号安全,请及时绑定邮箱和手机立即绑定

Facebook JSON编码错误

Facebook JSON编码错误

人到中年有点甜 2019-12-04 14:50:57
我下载了我的Facebook Messenger数据(在您的Facebook帐户中,转到设置,然后转到您的Facebook信息,然后下载您的信息,然后创建一个至少选中了“ 消息”框的文件)以进行一些统计但是,编码存在一个小问题。我不确定,但是Facebook似乎对此数据使用了错误的编码。当我使用文本编辑器打开它时,我看到的是这样的:Rados\u00c5\u0082aw。当我尝试使用python(UTF-8)打开它时,得到了RadosÅ\x82aw。但是我应该得到:Radosław。我的python脚本:text = open(os.path.join(subdir, file), encoding='utf-8')conversations.append(json.load(text))我尝试了几种最常见的编码。示例数据是:{  "sender_name": "Rados\u00c5\u0082aw",  "timestamp": 1524558089,  "content": "No to trzeba ostatnie treningi zrobi\u00c4\u0087 xD",  "type": "Generic"}
查看完整描述

3 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

我解析对象的解决方案parse_hook在load / loads函数中使用回调:


import json



def parse_obj(dct):

    for key in dct:

        dct[key] = dct[key].encode('latin_1').decode('utf-8')

        pass

    return dct



data = '{"msg": "Ahoj sv\u00c4\u009bte"}'


# String

json.loads(data)  

# Out: {'msg': 'Ahoj svÄ\x9bte'}

json.loads(data, object_hook=parse_obj)  

# Out: {'msg': 'Ahoj světe'}


# File

with open('/path/to/file.json') as f:

     json.load(f, object_hook=parse_obj)

     # Out: {'msg': 'Ahoj světe'}

     pass

更新:


用字符串解析列表的解决方案不起作用。因此,这里是更新的解决方案:


import json



def parse_obj(obj):

    for key in obj:

        if isinstance(obj[key], str):

            obj[key] = obj[key].encode('latin_1').decode('utf-8')

        elif isinstance(obj[key], list):

            obj[key] = list(map(lambda x: x if type(x) != str else x.encode('latin_1').decode('utf-8'), obj[key]))

        pass

    return obj


查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 458 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号