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

时间:2018-04-24 19:58:51

标签: bash curl telegram emoji

我试图使用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机器人的正确语法是什么?

非常感谢!

2 个答案:

答案 0 :(得分:3)

为Telegram API生成JSON

如果您的问题与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"

从JSON到字符串文字

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

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

...将输出:

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

从String Literal到JSON

走向另一个方向:

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

...作为输出发出:

"\ud83d\udd14"

答案 1 :(得分: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"