2015-10-15 45 views
0

我想獲得一個可能包含UCS-2或UCS-4表情符號代碼到MySQL數據庫的字符串。需要被髮送到MySQL的JSON響應我在Python得到的是從下面的僞代碼:如何使用Python從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()函數的表情符號,失敗,我似乎無法弄清楚如何將其替代脫離原始數據。

任何獲得這些代碼字符串的解決方案就足夠了,但理想情況下,我想在我的系統的Python端刪除/替換它們。不過我不介意在PHP中使用str_replace()和正則表達式來移除表情符號字符串化的代碼。要點是,這些表情符號必須是無效的。

我該如何刪除它們?

(我擔心我的Unicode和一般的字符集的理解是問題的根源在這裏。)

+1

您應該以您獲得的格式顯示一些實際數據,以及您正在嘗試的代碼以及您收到的錯誤;我不明白爲什麼你應該調用'str()'。 –

+2

請注意,如果您剝離這些字符的唯一原因是MySQL無法應付它們,請注意非常樂意存儲非ASCII字符,因此您可能根本無需剝離它們。 –

回答

0

的問題不在於表情符號,與所有的Unicode字符與大於127碼的問題,你將有例如這封信,同樣的問題。你需要弄清楚如何正確使用unicode。你有正確的Unicode字符串:u'key': u'value'所以只是不要調用它。

的方式小例子如何不應該做的:

>>> 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' 

如果你的問題是,特別是約表情符號,那麼我會改變我的答案。

0

感謝您的幫助;該建議指出了我的正確方向。這是爲我工作的解決方案。這是做什麼用空白替換所有Emojis('')。

進口MySQLdb的

emoji_infected_text = 「字符串與UCS-2和/或UCS-4代碼」

DEF remove_non_ascii_1(文本): 返回 ''。加入([I如果ORD(ⅰ) < 128別的 '' 對於i在文本])

DEF remove_non_ascii_2(文本): 返回應用re.sub(R '[^ \ x00- \ 0x7F部分] +', '',文本)

DEF remove_non_ascii_3(text): r eturn re.sub(u'[\ U00010000- \ 0000ffff] +','',text)

emoji_free_text = MySQLdb。escape_string(remove_non_ascii_3(remove_non_ascii_3(remove_non_ascii_1(emoji_infected_text))))

顯然你可以合併這個代碼很多,但我不希望那裏有任何混淆的人在未來遭受同樣的問題。 MySQLdb.escape_string()與Emoji移除任務無關,但確保程序在插入混亂字符(如引號或反斜槓)時不會失敗。

相關問題