如何使用Python从JSON响应中删除表情符号代码?

时间:2015-10-15 07:58:48

标签: python mysql json emoji python-unicode

我想获得一个可能包含UCS-2或UCS-4表情符号代码的字符串到MySQL数据库中。我在Python中获得的需要发送到MySQL的JSON响应来自以下伪代码:

response = requests.post("URL", headers=headers, data=data)
responseDict = response.json()
strings = responseDict["data_with_emojis"]  # data looks like u'key': u'value', ...

Python的本机str()函数在emojis上失败,我似乎无法弄清楚如何将它们替换为原始数据。

获取这些代码的任何解决方案都足够了,但理想情况下我想在我的系统的Python端删除/替换它们。但是,我不介意在PHP中使用带有正则表达式的str_replace()来删除表情符号字符串代码。重点是,这些表情符号必须是GONE。

如何删除它们?

(我担心我对Unicode和字符集的理解一般是这里问题的根源。)

3 个答案:

答案 0 :(得分:0)

如果您只想删除Unicode表情符号,可以使用Python执行此操作:

>>> yourUnicodeString = u'I like answering questions on SO ☺'
>>> print(yourUnicodeString)
>>> print(yourUnicodeString.replace(u'☺', u':-)'))

您可能也对

感兴趣

答案 1 :(得分:0)

问题不在于表情符号,代码高于127的所有Unicode字符的问题,你会遇到同样的问题,例如这封信Ä。你需要弄清楚如何正确地取出unicode。您已经拥有正确的Unicode字符串:u'key': u'value'所以不要将str调用它。

不应该如何做的小例子:

>>> x=u'Ä'
>>> str(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xc4' in position 0: ordinal not in range(128)
>>> x.encode('utf8')
'\xc3\x84'

如果你的问题是关于Emojis的,那么我会改变我的答案。

答案 2 :(得分:0)

感谢您的帮助;这个建议指出了我正确的方向。这是适合我的解决方案。这样做是用空格替换所有的Emojis('')。

导入MySQLdb

emoji_infected_text =“包含UCS-2和/或UCS-4代码的字符串”

def remove_non_ascii_1(文字):         return''。join([i if ord(i)&lt; 128 else''for i in text])

def remove_non_ascii_2(文字):     return re.sub(r'[^ \ x00- \ x7F] +','',text)

def remove_non_ascii_3(text):     return re.sub(你'[\ U00010000- \ U0010ffff] +','',文字)

emoji_free_text = MySQLdb.escape_string(remove_non_ascii_3(remove_non_ascii_2(remove_non_ascii_1(emoji_infected_text))))

显然你可以将这段代码整合一下,但我不希望将来遇到与我同样问题的人有任何困惑。 MySQLdb.escape_string()与表情符号删除任务无关,但它有助于确保程序在插入引号或反斜杠等令人困惑的字符时不会失败。