如何使用curl通过bash脚本将表情符号发送到Telegram bot?

问题描述 投票:2回答:2

我正在尝试使用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机器人发送表情符号的正确语法是什么?

非常感谢你!

bash curl telegram emoji
2个回答
3
投票

Generating JSON For The Telegram API

如果您的问题是关于JSON编码的,请让jq为您解决:

s='🔔'  ## or s=$'\360\237\224\224'

json=$(jq -anc --arg id "$chat" --arg s "$s" '{"chat_id": $id, "text": $s}')
curl -X POST -H "Content-Type: application/json" -d "$json" \
  "https://api.telegram.org/$API/sendMessage"

From JSON To String Literal

在bash 4.0或更高版本中,可以要求shell本身为您提供ASCII可打印的文字字符串,该字符串将对应于多字节字符。

LC_ALL=C printf "s=%q\n" "$(jq -r . <<<'"\ud83d\udd14"')"

...将输出:

s=$'\360\237\224\224'

From String Literal To JSON

走向另一个方向:

s=$'\360\237\224\224'
jq -anM --arg s "$s" '$s'

...作为输出发出:

"\ud83d\udd14"

0
投票

您可以使用echo -e '\U0001F514'获取表情符号

curl -F "text=`echo -e '\U0001F514'` - it's a bell" "https://api.telegram.org/$API/sendMessage?chat_id=$chat"

或者$'\U0001F514'

curl -F "text="$'\U0001F514'" - it's a bell" "https://api.telegram.org/$API/sendMessage?chat_id=$chat"
© www.soinside.com 2019 - 2024. All rights reserved.