Python facebook消息的未知编码
我已经从facebook请求并下载了我所有的messenger数据,我想解析返回的json以进行一些语言分析 我的问题是,因为我是法国人,我的大部分对话都是用法语进行的,而且有很多特殊的角色(微笑者也是如此): 下面是一个示例:在messenger中,它拼写为: “评论:s” 但如果我使用unicode或utf-8解码unicode字符,我得到的结果是: “评论(如有)©goÃste” 当我试图将它们写入控制台时,它会导致UnicodeError崩溃 到目前为止,我的尝试包括许多(坏的)正则表达式和替换:Python facebook消息的未知编码,python,json,python-3.x,facebook,Python,Json,Python 3.x,Facebook,我已经从facebook请求并下载了我所有的messenger数据,我想解析返回的json以进行一些语言分析 我的问题是,因为我是法国人,我的大部分对话都是用法语进行的,而且有很多特殊的角色(微笑者也是如此): 下面是一个示例:在messenger中,它拼写为: “评论:s” 但如果我使用unicode或utf-8解码unicode字符,我得到的结果是: “评论(如有)©goÃste” 当我试图将它们写入控制台时,它会导致UnicodeError崩溃 到目前为止,我的尝试包括许多(坏的)正则表达
@staticmethod
def fix_special_char2(string):
if isinstance(string, str):
string = string.replace("'", ' ')
string = string.replace('\u00e2\u0080\u0099', " ")
string = string.replace('\u00c3\u00a9', 'e')
string = string.replace('\u00c3\u00af', 'i')
string = string.replace('\u00c3\u0080', 'a')
string = string.replace('\u00c3\u0087', 'c')
string = string.replace('\u00c3\u00aa', 'e')
string = string.replace('\u00c3\u00a0', 'a')
string = string.replace('\u00e2\u009d\u00a4\u00ef\u00b8\u008f', '<3')
string = string.replace('\u00c3\u0089', 'e')
string = string.replace('\u00e2\u0082\u00ac', ' euros')
string = string.replace('\u00c5\u0093', 'oe')
string = string.replace('\u00c3\u0082', 'a')
string = string.replace('\u00c3\u008a', 'e')
string = string.replace('\u00c3\u0089', 'e')
string = string.replace('\u00e2\u009d\u00a4', '<3')
string = string.replace('\u00c3\u0088', 'e')
string = string.replace('\u00c3\u00a2', 'a')
string = string.replace('\u00c3\u00b4', 'o')
string = string.replace('\u00c3\u00a7', 'c')
string = string.replace('\u00c3\u00a8', 'e')
string = string.replace('\u00c2\u00b0', '°')
string = string.replace('\u00c3\u00b9', 'u')
string = string.replace('\u00c3\u00ae', '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
@staticmethod
def fix_特殊字符2(字符串):
如果isinstance(字符串,str):
字符串=字符串。替换(“”,“”)
string=string.replace('\u00e2\u0080\u0099',“”)
string=string.replace('\u00c3\u00a9','e')
string=string.replace('\u00c3\u00af',i')
string=string.replace('\u00c3\u0080','a')
string=string.replace('\u00c3\u0087','c')
string=string.replace('\u00c3\u00aa',e')
string=string.replace('\u00c3\u00a0','a')
string=string.replace('\u00e2\u009d\u00a4\u00ef\u00b8\u008f',“我将使用包ftfy
来解决此问题
我在安装当前版本时遇到了一些问题,但是它在pip install”ftfy上运行得非常好。我在pip install pytest runner
之前运行了pip install ftfy
获得了最新版本。非常感谢,我将对此进行研究,我不会将其标记为已接受,因为我的目标是理解逻辑在facebook编码的背后,我可以创建一个简单的解码功能,而不必使用整个模块,在这种情况下,这似乎有些过分(也许我正在寻找的功能只是隐藏在ftfy代码中,我会寻找它)@CBroe查看utf8表,\u00c3=>Ã\u00a9=>©那么我应该如何从中得到一个“é”?是的,你是对的,é
应该编码为\u00e9
。检查,这解决了同样的问题。谢谢,他看到了我没有看到的东西:éhex代码是\xc3\xa9,而fb生成的unicode是:\u00c3\u00a9,so如果我只是用a\x替换每一个u00出现,会怎么样?
@staticmethod
def fix_special_char2(string):
if isinstance(string, str):
string = string.replace("'", ' ')
string = string.replace('\u00e2\u0080\u0099', " ")
string = string.replace('\u00c3\u00a9', 'e')
string = string.replace('\u00c3\u00af', 'i')
string = string.replace('\u00c3\u0080', 'a')
string = string.replace('\u00c3\u0087', 'c')
string = string.replace('\u00c3\u00aa', 'e')
string = string.replace('\u00c3\u00a0', 'a')
string = string.replace('\u00e2\u009d\u00a4\u00ef\u00b8\u008f', '<3')
string = string.replace('\u00c3\u0089', 'e')
string = string.replace('\u00e2\u0082\u00ac', ' euros')
string = string.replace('\u00c5\u0093', 'oe')
string = string.replace('\u00c3\u0082', 'a')
string = string.replace('\u00c3\u008a', 'e')
string = string.replace('\u00c3\u0089', 'e')
string = string.replace('\u00e2\u009d\u00a4', '<3')
string = string.replace('\u00c3\u0088', 'e')
string = string.replace('\u00c3\u00a2', 'a')
string = string.replace('\u00c3\u00b4', 'o')
string = string.replace('\u00c3\u00a7', 'c')
string = string.replace('\u00c3\u00a8', 'e')
string = string.replace('\u00c2\u00b0', '°')
string = string.replace('\u00c3\u00b9', 'u')
string = string.replace('\u00c3\u00ae', '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
>>> from ftfy import fix_text
>>> fix_text(u'Comment il est \u00c3\u00a9go\u00c3\u00afste :s')
'Comment il est égoïste :s'