我有一部诺基亚N900手机,当发送短信时,小部件会显示消息中剩余的字符数(以及发送整条消息所需的实际短消息数)。
我住在法国,在用非ASCII字符编写邮件时,我注意到以下奇怪的事情:
所以我想知道消息是如何编码的,因为我看不到上面的方案与我所知的传统编码(iso-8859-1,UTF-8,UTF-16 ......)相匹配。
答案 0 :(得分:10)
https://en.wikipedia.org/wiki/SMS#Message_size
根据编码,SMS可以发送160/140/70个字符。如果使用任何非ASCII字符,则整个消息必须以UTF-16编码,因此您经历了“消费”。
答案 1 :(得分:6)
@Vicky和@timdream是正确的,除了我认为它在技术上UCS-2而不是手机有时使用的UTF-16,每个角色有一个固定的16位大小。 UTF-16使用每个字符两个或四个字节的可变宽度,具体取决于要编码的字符。 This Wikipedia article详细解释了这一点。 UCS-2严格将消息最多删除70个字符(160字节)。虽然the Unicode Consortium's description of UCS-2有点令人困惑,但网上处理短信的少数网站确认维基百科是对的。
答案 2 :(得分:5)
你已经得到了@timdream的答案,但是另外一点是你提到的一些扩展字符作为单个字符包含在GSM 7位字母表中,有些是通过额外的转义以GSM 7位编码的字符(所以两个字节表示该字符),有些不能在GSM 7位中完全编码,需要编码为UTF-16。
完整的字母定义如下: http://www.unicode.org/Public/MAPPINGS/ETSI/GSM0338.TXT
注意c-cedilla的特殊性 - 来自该文件,
ETSI GSM 03.38规范显示了一个大写的C-cedilla 字形在0x09。这可能是显示有限的结果 使用下行程序处理字符的功能。然而, 该 语言覆盖意图显然是小写的 c-cedilla,如图所示 在下面的映射中。大写C-cedilla的映射是 显示 在映射表的注释行中。
有些设备将大写和小写c-cedilla编码为相同的编码字符(0x09)。