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

How to send emoji via bash script to Telegram bot using curl?

我正在尝试使用 bash 脚本向我的 Telegram 机器人发送一个 emoji/emoticon。此 bash 脚本调用 Telegram API 如下:

curl -s -X POST 'https://api.telegram.org/'$API'/sendMessage' -F chat_id=$chat -F text=$text

由于 bash 脚本不是 unicode,我不能简单地 copy/paste 来自网络的表情符号。因此,我尝试使用 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 API

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

s=''  ## or s=$'0744'

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"

从 JSON 到字符串文字

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

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

...将输出:

s=$'0744'

从字符串文字到 JSON

往另一个方向走:

s=$'0744'
jq -anM --arg s "$s" '$s'

...作为输出发出:

"\ud83d\udd14"

您可以使用 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"