短信长度如何计算
一条短信承载 140 个八位组(1,120 比特)的用户数据。在 GSM 7 位默认字符集中,每个字符占 7 比特,所以 140 个八位组可容纳 160 个字符。在 UCS-2(短信使用的 16 位 Unicode 编码)中,每个字符占 2 个八位组,同样的空间只能容纳 70 个字符。
短信超过一条时,会作为拼接短信发送。每一段开头带有 6 个八位组的用户数据头(UDH),包含参考编号、总段数和本段序号,手机据此重新组合。该头部使每段剩下 134 个八位组:153 个 GSM-7 字符或 67 个 UCS-2 字符。
收件人看到的是一条短信,但运营商和服务商会对每一段计费。161 个字符的 GSM-7 短信按两条计费,71 个字符的阿拉伯语短信同样按两条计费。
- GSM-7:单条 160 个字符,拼接时每段 153 个(2 段共 306,3 段共 459)。
- UCS-2:单条 70 个字符,拼接时每段 67 个(2 段共 134,3 段共 201)。
- 文本中任何位置出现一个非 GSM 字符,整条短信都会切换为 UCS-2。
GSM-7 字符集与扩展表
GSM 7 位默认字符集定义于 3GPP TS 23.038(原 GSM 03.38)。其基本表有 128 个位置:拉丁字母和数字、常用标点,以及 @ £ $ ¥ è é ù ì ò Ç Ø ø Å å Ä Ö Ñ Ü ä ö ñ ü à ß Æ æ É ¿ ¡ § 和希腊大写字母 Δ Φ Γ Λ Ω Π Ψ Σ Θ Ξ 等字符。换行符和回车符也各算一个字符。
另有十个字符位于扩展表中,需通过转义码输入,因此每个占两个七位组:欧元符号 €、脱字符 ^、花括号 { }、方括号 [ ]、波浪号 ~、竖线 |、反斜杠 \ 和换页符。158 个字母加一个 € 恰好是 160 个七位组,再多一个字母就变成两段。
转义序列必须位于同一段内,因此如果占两个七位组的字符会跨越 153 的边界,它会被移到下一段。本计算器遵循这一规则,所以某一段可能在第 152 个位置结束。
TS 23.038 还定义了国家语言切换表(例如土耳其语、西班牙语、葡萄牙语和若干印度文字),可让部分短信保持 7 位编码。支持情况取决于网络和手机,因此大多数平台以及本计算器仅使用默认字符集。
悄悄把短信变成 Unicode 的字符
多数意外出现的 70 字符限制,源于从文字处理软件、CMS 或手机键盘复制的文本,它们会自动插入排版字符。这些字符看起来与 GSM-7 中的对应字符几乎一样,但码位不同。
表中没有的带重音字母,如 á í ó ú â ê ã õ 和小写 ç,同样会触发 UCS-2。只有当您的受众接受无重音拼写时才替换它们;对许多语言来说,拼写正确比多出的一段更重要。
- 弯引号和撇号 ‘ ’ “ ”(请使用 ' 和 ")。
- 短破折号和长破折号 – —(请使用 -),以及省略号 …(请使用 ...)。
- 不间断空格和窄空格,复制粘贴后往往看不见(请使用普通空格)。
- 模板中隐藏的零宽字符和字节顺序标记(请删除)。
- 表情符号:多数占 2 个 UCS-2 单位,国旗或带肤色的表情占 4 个,家庭组合序列占 8 个或更多。
一键转换为 GSM-7
当短信为 Unicode 时,「转换为 GSM-7」按钮只会在安全的前提下,用 GSM-7 字符重写文本:弯引号和破折号换成普通符号,不可见空格被移除,GSM-7 没有的重音被去掉(á → a,ã → a,小写 ç → Ç),连字和符号被拼写展开(œ → oe,™ → TM)。é、ü、ñ、ß、€ 等本来就属于 GSM-7 的字符会被保留。
工具会列出每一处修改,并显示修改前后的分段数,「撤销」可恢复原文。阿拉伯语无法转换:阿拉伯语短信始终使用 Unicode,每条 70 个字符,因此请缩短内容或改用 WhatsApp 发送。表情符号和其他非拉丁文字同样保持不变。
阿拉伯语短信:70 个字符,拼接时每段 67 个
阿拉伯字母不在 GSM-7 中,所以每条阿拉伯语短信都以 UCS-2 发送:单条 70 个字符,超长后每段 67 个。一条 140 个字符的阿拉伯语短信要按三段计费,而不是两段,因为 140 大于 2 × 67 = 134。
每个码位都计入,包括空格、混入文本的拉丁字母、阿拉伯-印度数字和标音符号(tashkeel)。带全部标音的单词,所占单位可能是不带标音时的两倍,因此事务类短信除非为避免歧义,否则请省略标音符号。
海湾地区的验证码和提醒短信,尽量把阿拉伯语文本控制在 70 个字符以内,把验证码放在靠前位置,并避免使用表情符号。若同一条提醒用英文发送,同样的价格可以容纳两倍以上的内容。
从分段数到成本
您的每月短信账单取决于分段数而不是短信条数:每条短信的分段数 × 每月短信条数 × 目的网络的费率。把一次活动从 2 段压缩到 1 段,每次发送的成本就减半。
请检查填入变量后的最终文本。客户姓名、订单号或缩短链接都可能把模板推过边界,带阿拉伯语或重音的姓名也可能让 GSM-7 模板只对部分收件人切换为 UCS-2。
- 用每个占位符最长的真实取值进行测试。
- 缩短链接,删除末尾的空格和换行。
- 与其写很长的多段短信,不如保留一个清晰的行动号召。
