【发布时间】:2019-04-26 23:12:37
【问题描述】:
我正在尝试使用 bash 脚本向我的 Telegram 机器人发送表情符号/表情符号。此 bash 脚本调用 Telegram API 如下:
curl -s -X POST 'https://api.telegram.org/'$API'/sendMessage' -F chat_id=$chat -F text=$text
由于 bash 脚本不是 unicode,我不能简单地从网络上复制/粘贴表情符号。因此我尝试使用 UTF-8 表情符号变体,但反斜杠字符不断被转义。
预期的 json 输出应该如下:"text":"\ud83d\udd14"
相反,这是我得到的:
输入:$text = \xF0\x9F\x98\x81
JSON 输出 = "text":"\\xF0\\x9F\\x98\\x81\\"
输入:$text = u'\U0001F604'
JSON 输出 = "text": "u'\\U0001F604'\"
输入:$text = \U0001F514
JSON 输出 = "text":"\\U0001F514"
输入:$text = "(1f600)"
JSON 输出 = "text":"\"(1f600)\""
输入:$text = \ud83d\ude08
JSON 输出 = "text":"\\ud83d\\ude08"
输入:$text = \\\ud83d\\\udd14
JSON 输出 = "text":"\\\\\\ud83d\\\\\\udd14"
使用 bash 脚本发送表情符号并 curl 到我的 Telegram 机器人的正确语法是什么?
非常感谢!
【问题讨论】:
-
如果你想生成 JSON,让一个用来处理 JSON 的工具,比如
jq,弄清楚如何编码你的字符串。 -
顺便说一句,“bash 脚本不是 unicode”是什么意思?如果您需要修复编辑器设置,那是文本编辑器配置的问题,可以从那里修复。 UTF-8 是一种完全有效的编码,可用于您的脚本本身。
-
也许我把事情搞混了,但我在精简的 Unix 环境(Synology NAS)上通过 SSH 使用 nano。如果我从 Web 复制/粘贴一个表情符号到我的 SSH 会话中,我会得到两个问号。因此我认为这是一个编码问题。
-
嗯。您使用什么终端进行 SSH 会话?您确定那是支持 UTF-8 并使用合适的字体吗?
-
我正在使用 Rebex,但似乎编码设置为某些 ISO-xxxx 标准。将其切换为 utf 8 后,我可以复制/粘贴表情符号,但我仍然必须首先将它们声明为变量,以便电报 api 正确处理它们(即不会被转义)。