如何通过Bash脚本使用Curl向Telegram机器人发送表情符号?
解决Bash脚本向Telegram机器人发送表情符号的问题
我来帮你搞定这个表情符号发送的难题!其实Bash是支持Unicode的,只是直接粘贴或者转义序列的处理方式没找对,下面给你两种靠谱的解决方案:
方法一:用printf生成正确的Unicode字符
直接在Bash里写\ud83d\udd14会被转义,因为Bash会把反斜杠当成特殊字符处理。我们可以用printf来解析这个转义序列,生成对应的表情符号:
# 先设置环境确保UTF-8编码(可选,但能避免终端乱码) export LC_ALL=en_US.UTF-8 # 用printf生成表情符号,赋值给text变量 text=$(printf "\ud83d\udd14") # 调用Telegram API发送消息 curl -s -X POST "https://api.telegram.org/$API/sendMessage" -F chat_id="$chat" -F text="$text"
这样printf会把\ud83d\udd14转换成对应的锁形表情符号,curl发送表单数据时会自动处理编码,Telegram就能正确识别了。
方法二:直接发送JSON格式请求
如果你更倾向于用JSON格式(和你提到的预期输出一致),可以改用-d参数发送JSON数据,注意要正确转义双引号:
curl -s -X POST "https://api.telegram.org/$API/sendMessage" \ -H "Content-Type: application/json" \ -d "{\"chat_id\": \"$chat\", \"text\": \"\ud83d\udd14\"}"
这里的关键是用双引号包裹整个JSON字符串,同时把JSON内部的双引号用反斜杠转义(\"),这样Bash就不会把内部的双引号当成变量边界,Telegram收到的JSON里就会是正确的"text":"\ud83d\udd14"格式。
额外注意事项
- 确保你的脚本文件是以UTF-8编码保存的,很多编辑器默认可能不是这个编码,会导致表情符号乱码。
- 终端环境也要设置为UTF-8(一般现代终端默认都是,但可以用
echo $LANG检查,输出包含UTF-8就没问题)。
内容的提问来源于stack exchange,提问作者Freek
相关产品推荐
相关产品推荐

