我试图使用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机器人的正确语法是什么?
非常感谢!
答案 0 :(得分:3)
如果您的问题与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"
在bash 4.0或更新版本中,可以要求shell本身为您提供一个ASCII可打印的文字字符串,该字符串对应于一个多字节字符。
LC_ALL=C printf "s=%q\n" "$(jq -r . <<<'"\ud83d\udd14"')"
...将输出:
s=$'\360\237\224\224'
走向另一个方向:
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"