问题描述
简介
我正在创建一个带有 Telepot 和 selenium 的刮刀机器人,当我获得需要使用电报机器人发送的文本数据时,它无法读取,因为它包含格式错误的 unicode 转义字符(表情符号),例如:
"hi I like this emoji: \\u265B\\u2655"
"hi I like this emoji: \u265B\u2655"
需要的输出
"hi I like this emoji: ♕♛"
就我而言,我不能使用 u"hi I like this emoji: \u265B\u2655"
,因为我的字符串存储在使用 selenium 和 regex 获得的变量中
我尝试了什么
我用了 json.loads("hi I like this emoji: \\u265B\\u2655")
我得到了这个
引发异常
raise JSONDecodeError("Expecting value",s,err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
问题
如何格式化这个字符串以获得所需的输出?
编辑
我试过了:
json.loads('"' + mystring + '"')
我得到了:
json.decoder.JSONDecodeError: Invalid control character at: line 1 column 23 (char 22)
如评论中所问,这是 print(repr(mystring))
的结果:
'La Spezia\\ud83d\\udccd\\n\\ud83d\\udcdaliceo Scientifico Sportivo A. Pacinotti\\ud83c\\udfeb\\nITALIAN FENCER \\ud83c\\uddee\\ud83c\\uddf9 \\ud83e\\udd3a SPCS!!\\nELECTRIC BASS\\ud83c\\udfb8\\ud83c\\udfb6\\nBooks \\ud83d\\udcd6\\n2a T ( ESCONI ) \\ud83d\\ude0d \\ud83c\\udf93'
解决方法
从您的最终编辑中,抓取的字符串看起来像是直接从某个 JSON 文件中提取的 JSON 编码字符串。 JSON 中的字符串需要双引号才能正确提取:
>>> import json
>>> s='La Spezia\\ud83d\\udccd\\n\\ud83d\\udcdaLiceo Scientifico Sportivo A. Pacinotti\\ud83c\\udfeb\\nITALIAN FENCER \\ud83c\\uddee\\ud83c\\uddf9 \\ud83e\\udd3a SPCS!!\\nELECTRIC BASS\\ud83c\\udfb8\\ud83c\\udfb6\\nBooks \\ud83d\\udcd6\\n2a T ( ESCONI ) \\ud83d\\ude0d \\ud83c\\udf93'
>>> print(json.loads(f'"{s}"'))
La Spezia?
?Liceo Scientifico Sportivo A. Pacinotti?
ITALIAN FENCER ?? ? SPCS!!
ELECTRIC BASS??
Books ?
2a T ( ESCONI ) ? ?