You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

动态Unicode消息显示乱码及Clickatell API调用错误求助

解决Clickatell API发送含撇号消息乱码及Unicode参数报错问题

问题根源

  1. 乱码是因为消息文本编码和API要求不匹配,你之前的请求还犯了个低级错误:把Car放在了URL参数外面,导致text参数内容不完整。
  2. 用unicode=1时报错116,是因为没按要求把文本转成UTF-16BE格式的十六进制字符串,直接写2019属于无效格式。

两种可行解决方案


方案一:直接用UTF-8 URL编码(无需unicode参数)

这是最简单的处理方式,步骤如下:

  • 动态生成消息时,先把完整文本(比如Swifty’s Car)转换成UTF-8编码,再对UTF-8字节做URL编码(把特殊字符转成%XX格式)。
  • 正确的text参数值应为:Swifty%E2%80%99s%20Car(撇号转成%E2%80%99,空格转成%20)。
  • 完整请求示例(替换XXX为你的真实参数):
    https://api.clickatell.com/http/sendmsg?user=XXX&password=XXX&api_id=XXX&to=XXX&text=Swifty%E2%80%99s%20Car
    
  • 注意:必须确保整个消息内容都包含在text=后面,不能像之前那样把Car丢在URL参数外。

方案二:使用unicode=1参数(需UTF-16BE十六进制)

如果必须用Unicode模式,要严格遵循API规则处理:

  • 动态生成文本后,先把文本转换成**UTF-16大端序(BE)**编码,再将字节转换成无分隔符的十六进制字符串。
  • 比如Swifty’s Car转成UTF-16BE的十六进制为:005300770069006600740079201900730020004300610072。
  • 把这个十六进制字符串作为text参数的值,同时追加&unicode=1。
  • 完整请求示例:
    https://api.clickatell.com/http/sendmsg?user=XXX&password=XXX&api_id=XXX&to=XXX&text=005300770069006600740079201900730020004300610072&unicode=1
    
  • 这样就不会触发116错误,接收方也能正确显示撇号。

关键注意事项

  • 动态生成请求时,一定要用代码自动处理编码:比如用Python的urllib.parse.quote()、Java的URLEncoder.encode()这类工具函数处理UTF-8文本,或用对应语言的Unicode工具类生成UTF-16BE的十六进制字符串,绝对不要手动拼接编码内容。
  • 所有参数必须完整包含在URL的参数部分,不能拆分内容。

内容的提问来源于stack exchange,提问作者Vvikas Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 10:14:54