如何使用 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"
我正在尝试使用 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"