猿问

Facebook JSON编码错误

我下载了我的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"

}


人到中年有点甜
浏览 459回答 3
3回答

凤凰求蛊

我解析对象的解决方案parse_hook在load / loads函数中使用回调:import jsondef parse_obj(dct):    for key in dct:        dct[key] = dct[key].encode('latin_1').decode('utf-8')        pass    return dctdata = '{"msg": "Ahoj sv\u00c4\u009bte"}'# Stringjson.loads(data)  # Out: {'msg': 'Ahoj svÄ\x9bte'}json.loads(data, object_hook=parse_obj)  # Out: {'msg': 'Ahoj světe'}# Filewith open('/path/to/file.json') as f:     json.load(f, object_hook=parse_obj)     # Out: {'msg': 'Ahoj světe'}     pass更新:用字符串解析列表的解决方案不起作用。因此,这里是更新的解决方案:import jsondef 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
随时随地看视频慕课网APP

相关分类

Python
我要回答