短信字数限制
160、153、70 和 67

决定你付多少钱的四个数字。每一个是从哪来的,以及哪些字符会悄悄把你从前一组推到后一组。

简单回答

情况可用字数在 HantarSMS 上能打
纯英文,一条装得下160156
纯英文,拆成多段每段 1532 段 302,3 段 455
含任何非 GSM 字符(中文等),一条7066
含任何非 GSM 字符,拆段每段 672 段 130,3 段 197

最后一列比较少,是因为上游通道会在每条短信前加 4 个字符前缀(下面有解释)。

为什么是 160

一条短信的载荷是 140 字节 —— 这个上限是 1980 年代设计标准时,按信令通道的剩余容量定下来的。GSM-7 字母表每个字符只占 7 位而不是 8 位,所以 140 字节 × 8 ÷ 7 = 160 个字符。这不是谁定的政策,而是算出来的结果。

为什么拆段后降到 153

较长的短信不是当成几条独立短信发出去的。它被拆成几段,每段都带一个 6 字节的头(UDH),告诉手机这段属于哪条短信、按什么顺序拼回去。这个头吃掉 GSM-7 的 7 个字符空间,剩下 153。

这就产生了一个反直觉、会让人多花钱的边界。下面的长度是你在 HantarSMS 上打的字,上游加的 4 个字符前缀另外算:

长度段数原因
1561加上前缀是 160 —— 不用拆,不需要头
1572加上前缀是 161:要拆,两段都降到 153
3022加上前缀是 306 = 153 × 2
3033加上前缀是 307;153 × 3 = 459 可用

超过 156 一个字符,账单就翻倍。把 157 个字符的短信删掉一个字,是短信里最便宜的省钱方法。

为什么一个 emoji 让你少了 90 个字符

GSM-7 是一套固定、大约 128 个字符的字母表。只要有任何一个字符不在里面,整条短信就要改用 UCS-2(Unicode),每个字符占 16 位而不是 7 位。140 字节 ÷ 2 = 70 个字,拆段后每段 67。

这适用于整条短信,不只是那一个字符。150 个字符的英文促销是一段;加一个 emoji 就变成 151 个 Unicode 字符 —— 加上 4 个字符前缀是 155 —— 按每段 67 算就是三段。一个字符,费用三倍。中文短信也是同样道理:只要有一个中文字,就按 Unicode 计。

看起来不像、却会触发 Unicode 的字符

emoji 很明显。真正坑人的是下面这些,通常是从文字处理软件或设计工具里复制过来的:

看起来像实际是改打成
’ 弯撇号U+2019,不在 GSM 里' 直撇号
“ ” 弯引号U+201C/201D" 直引号
– 短破折号、— 长破折号U+2013 / U+2014- 连字号
… 省略号字符U+2026... 三个点
不换行空格U+00A0普通空格
任何中文、淡米尔文或爪夷文本来就是 Unicode没有替代方法 —— 按 66 字计算

文字处理软件会在你打字时自动把前四种替换掉。短信看起来是纯英文、平台却显示 Unicode,原因多半就是这几个。

括号和符号:在我们的通道上各算一个字符

在 GSM 标准里,[ ] { } \ ~ ^ | 要用转义序列存成两个字符,很多计算器会把它们算两次。在我们的通道上,它们各算一个字符,也不会触发 Unicode(我们对照过上游计费记录:一条以 [ 结尾的 156 字符短信按一段收费)。带重音的字母和欧元符号不一样:é £ € 不是普通英文字符,任何一个都会让整条短信变成 Unicode。

让计算器算错的马来西亚细节

上游通道会在每条短信前加 4 个字符前缀,这几个字符是从你的 160 里扣的,不是运营商的:一段可以放 156 个纯英文字符,Unicode 则是 66 个字。在文本编辑器里量出来刚好 160 个字符的短信,会按 2 段收费。

网上通用的短信字数计算器不知道这一点,所以恰好在算错最贵的边界上算错。我们的分段计算器会算上前缀,显示的段数就是实际收费的段数。

写短信时实际该守的上限

这对活动预算意味着什么,详见马来西亚群发短信费用。

常见问题

一条短信最多几个字?

纯英文(GSM-7 编码)单条 160 个字符。更长的会拆段,每段只能放 153,因为拼接用的头占掉了其余部分。含任何非 GSM 字符(例如中文)上限是 70,拆段后每段 67。在 HantarSMS 上,上游通道会在每条短信前加 4 个字符前缀,所以一段可以放 156 个纯英文字符,Unicode 则是 66 个字。

为什么我的短信上限只有 70 个字?

短信里至少有一个字符不在 GSM-7 字母表里,整条短信就被迫改用 Unicode,每个字符占 16 位而不是 7 位。通常是一个 emoji、中文,或者从文字处理软件复制来的弯撇号。

一个 emoji 真的会让费用变三倍?

可能会。150 个字符的英文短信是一段;加一个 emoji 变成 151 个 Unicode 字符 —— 加上上游的 4 个字符前缀是 155 —— 按每段 67 算就是三段。emoji 本身不贵,是它让短信里每个其他字符都重新计价。

两条短信是多少个字?

纯英文 306 个字符(153 × 2),Unicode 134 个字(67 × 2)。注意不是 320:一旦拆段,每一段(包括第一段)都要让出 7 个字符给拼接用的头。在 HantarSMS 上还要扣掉上游的 4 个字符前缀,所以两段你能打的是 302 个纯英文字符或 130 个 Unicode 字。

空格和换行算字数吗?

都算。换行在 GSM-7 里算一个字符。短信末尾多出来的空格也算,这常常是看起来刚好 156 个字符、却按两段收费的原因。

把你的短信贴进去算一下

注册后在 WhatsApp 领 RM1 试用额度,后台写短信时会实时显示字数、段数和编码。