脸书消息的未知编码



我已经从Facebook请求并下载了我所有的信使数据,我想解析返回的json以进行一些语言分析。

我的问题是因为我是法国人,所以我的大部分对话都是法语,并且有很多特殊字符(笑脸也一样(:

{
"sender_name": "Antoine",
"timestamp_ms": 1493930091160,
"content": "Comment il est u00c3u00a9gou00c3u00afste :s",
"type": "Generic"
},

这是一个例子:在信使中它拼写:

"Comment il est égoïste :s">

但是如果我使用 Unicode 或 utf-8 解码 unicode 字符,我得到的只是:

"Comment il est à goé̄ste">

当我尝试将它们写入控制台时,它会因 UnicodeEncodeError 而崩溃。

到目前为止,我的尝试包括很多(坏的(正则表达式和替换:

@staticmethod
def fix_special_char2(string):
if isinstance(string, str):
string = string.replace("'", ' ')
string = string.replace('u00e2u0080u0099', " ")
string = string.replace('u00c3u00a9', 'e')
string = string.replace('u00c3u00af', 'i')
string = string.replace('u00c3u0080', 'a')
string = string.replace('u00c3u0087', 'c')
string = string.replace('u00c3u00aa', 'e')
string = string.replace('u00c3u00a0', 'a')
string = string.replace('u00e2u009du00a4u00efu00b8u008f', '<3')
string = string.replace('u00c3u0089', 'e')
string = string.replace('u00e2u0082u00ac', ' euros')
string = string.replace('u00c5u0093', 'oe')
string = string.replace('u00c3u0082', 'a')
string = string.replace('u00c3u008a', 'e')
string = string.replace('u00c3u0089', 'e')
string = string.replace('u00e2u009du00a4', '<3')
string = string.replace('u00c3u0088', 'e')
string = string.replace('u00c3u00a2', 'a')
string = string.replace('u00c3u00b4', 'o')
string = string.replace('u00c3u00a7', 'c')
string = string.replace('u00c3u00a8', 'e')
string = string.replace('u00c2u00b0', '°')
string = string.replace('u00c3u00b9', 'u')
string = string.replace('u00c3u00ae', 'i')
string = re.sub('[^A-Za-z ]+', ' ', string)
string = re.sub('\u00f0(.*){18}', '', string)
string = re.sub('\u00f3(.*){18}', '', string)
string = re.sub('([aeiu])\1{1,}', '\1', string)
string = re.sub('([aA-zZ])\1{2,}', '\1\1', string)
return string

但是,如果我能找到正确的编码,它会更容易、更快(而且更漂亮(还有一个微笑的问题,但似乎我的正则表达式无法捕获一些(尤其是当它们被链接时(。

编辑:它可能更像是:Facebook JSON编码错误的副本

而不是提议的:)

我会使用包ftfy来解决这个问题 https://github.com/LuminosoInsight/python-ftfy

>>> from ftfy import fix_text
>>> fix_text(u'Comment il est u00c3u00a9gou00c3u00afste :s')
'Comment il est égoïste :s'

我在安装当前版本时遇到问题,但它就像一个魅力,pip install 'ftfy<5'

最新更新