← 返回博客
指南

短信字符限制详解:GSM-7、Unicode与分段

短信字符限制详解:GSM-7、Unicode与消息分段

快速解答: 一条短信用GSM-7编码可承载160个字符,用Unicode(UCS-2)编码为70个字符。更长的文本分别按153或67字符拆分为多个分段——按分段计费。一个表情符号或一个弯引号就会把整条消息切换到Unicode,容量缩水56%,成本常常翻三倍。中文短信始终使用Unicode,即单条70字符、多段每段67字符。

字符限制看似冷知识,乘以一百万条消息就不是了。一场悄悄从一段变成两段的营销活动,预算直接翻倍。以下是编码计算的精确原理,以及控制方法。

为什么短信限制是160个字符?

短信搭载在GSM信令帧的空余容量中:每条140字节(1120比特)。1120比特能装多少字符,完全取决于每个字符需要多少比特:

编码每字符比特数单条短信每段(多段消息)
GSM-77160153
UCS-2(Unicode)167067

GSM-7通过只支持固定的128字符字母表(外加扩展表)把每个字符压缩到7比特。UCS-2几乎支持所有文字和符号,但每字符16比特——所以从160降到70。

GSM-7字母表包含哪些字符?

GSM-7涵盖:

  • 拉丁字母A–Z、a–z和数字0–9
  • 常用标点:. , ! ? : ; ' " ( ) + - * / = % & # @
  • 一组带重音的字母(é、ü、ñ、à、ö等)和希腊大写字母
  • 包括欧元和英镑在内的货币符号

扩展表陷阱: 少数字符——方括号、花括号、反斜杠、脱字符、竖线、波浪号和欧元符号——虽在GSM-7中,但每个要按两个字符计算,因为它们以转义符加代码的方式编码。

什么会悄悄把消息切换到Unicode?

GSM-7之外的任何内容都会迫使整条消息进入UCS-2——一个字符就够了。常见嫌疑人:

  • 从Word或Google文档粘贴的智能标点:弯引号、弯撇号、长破折号、省略号字符
  • 表情符号——任何一个
  • 非拉丁文字:中文、日文、韩文、阿拉伯文、希伯来文、泰文、大部分西里尔文
  • 不可见字符:不间断空格、复制粘贴带入的零宽连接符

最残酷的案例是弯撇号:与ASCII直撇号在视觉上几乎一样,却把一条160字符的消息变成3段Unicode发送。

消息级联如何工作?

当消息超出单条上限,它被拆分为多个部分,每部分携带一个用户数据头(UDH)——6个字节,告诉接收手机"这是第2段,共3段"。这个头部占用有效载荷空间,所以每段容量下降:

消息长度(GSM-7)分段数计费条数
1–160字符11
161–306字符22
307–459字符33
460–612字符44

Unicode的分界点是70,然后是134、201、268。手机把各段重组为一个气泡——用户永远看不到拆分,但您的账单看得到:每个分段都按一条完整消息计费。

编码错误到底要花多少钱?

以一条155字符的促销消息发给50万收件人、每段0.01美元计算:

  • 干净的GSM-7: 1段 × 500,000 = 5,000美元
  • 同样文本加一个表情: 70字符的Unicode分段 → 3段 × 500,000 = 15,000美元

一个字符,一万美元的差距。这是短信营销中最常见的隐性预算泄漏——而且完全可以避免。

如何把消息控制在一个分段?(6条规则)

  1. 了解真实上限。 GSM-7为160,Unicode为70。如果受众需要非拉丁文字,从一开始就按70/67规划文案。
  2. 清除智能标点。 发送前把弯引号、弯撇号和破折号归一化为ASCII。在管道中自动化处理——人总会从Word粘贴。
  3. 把表情符号当作付费功能。 营销中它可以靠互动赚回成本;在OTP和告警中纯属浪费。
  4. 注意扩展表。 方括号、花括号、波浪号、脱字符、竖线和欧元符号在GSM-7中按双字符计算。
  5. 检查API响应中的分段数。 好的供应商会返回每条消息的编码和分段数——当某个模板的分段数变化时告警。
  6. 留意URL和个性化变量。 一条长链接或一个意外偏长的名字都能把临界模板推入下一段。留出10–15个字符余量。

这些规则适用于RCS或WhatsApp吗?

不适用——RCS、WhatsApp等IP消息渠道不使用GSM编码和140字节帧,没有160字符限制,也没有按段计费。但每一场RCS或富媒体渠道营销都需要短信回退,而回退文本要遵守本指南的每一条规则。

ViteMobile的API为每条消息返回编码和分段数,仪表盘会标记分段数漂移的模板——让一个被粘贴进来的弯引号在乘以百万次发送之前就被抓住。

关键要点

  • 一条短信 = 140字节:160个GSM-7字符或70个Unicode字符。多段消息每段153/67。
  • 一个非GSM字符——一个表情、一个弯引号——就会把整条消息切换到Unicode,成本可能翻三倍。
  • 部分GSM-7字符(括号、欧元符号、波浪号)会悄悄按双字符计算。
  • 自动归一化标点,为个性化留余量,在生产环境按模板监控分段数。

常见问题

问:一条短信能包含多少个字符? 答:GSM-7编码160个,Unicode编码70个。更长的消息拆分为153(GSM-7)或67(Unicode)字符的分段,每段单独计费。中文短信按70/67计算。

问:为什么我的短信被拆成了多条? 答:超出了单条上限,或某个特殊字符把它切换到了Unicode。级联头部把每段容量降到153/67字符,每段单独计费。

问:表情符号算更多字符吗? 答:算——任何表情都会迫使整条消息进入Unicode(70字符上限),且大多数表情本身占两个编码单元。一个表情能把1段变成3段。

问:哪些字符会破坏GSM-7? 答:弯引号弯撇号、长破折号、省略号字符、不间断空格,以及任何非拉丁文字。括号、花括号和欧元符号仍属GSM-7但按双字符计算。

问:如何把短信控制在一个分段? 答:按正确上限计数、自动把智能标点归一化为ASCII、交易类文本避免表情、为个性化留余量,并监控API返回的分段数。