【问题标题】:make unicode a string stored in a variable and then send it with telepot使 unicode 成为存储在变量中的字符串,然后用 Telepot 发送
【发布时间】:2021-04-24 17:05:38
【问题描述】:

简介

我正在创建一个带有 Telepot 和 selenium 的爬虫机器人,当我获得需要使用电报机器人发送的文本数据时,它无法读取,因为它包含错误格式的 unicode-escape 字符(表情符号),例如:

"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 和正则表达式获得的变量中

我的尝试

我用了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.loads('"hi I like this emoji: \\u265B\\u2655"') → '嗨,我喜欢这个表情符号:♛♕'...
  • json.loads('"..."')json.loads("...") 之间存在很大差异。如果您在某处有 JSON 值,则该值应包含双引号。如果将该 JSON 值放入 Python 字符串文字中,则这些引号必须包含在 Python 字符串文字中,即:s = '"\\u265B..."' 以表示 JSON 值 "\u265B..." 应该是完全可 JSON 解码的。目前尚不清楚您到底在处理什么,以及您是否只是因为您将有效的 JSON 值错误地复制到 Python 源代码中进行测试而失败了,或者其他什么……
  • 你可能一开始就不想使用正则表达式来提取这个字符串(你能处理转义引号吗?)

标签: python python-3.x unicode python-unicode


【解决方案1】:

从您的最终编辑中,抓取的字符串看起来像是直接从某处的 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 ) ? ?

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2012-06-04
    相关资源
    最近更新 更多