短信非ASCII字符编码

时间:2011-08-18 07:44:14

标签: character-encoding sms

我有一部诺基亚N900手机,当发送短信时,小部件会显示消息中剩余的字符数(以及发送整条消息所需的实际短消息数)。

我住在法国,在用非ASCII字符编写邮件时,我注意到以下奇怪的事情:

  • 一些非ASCII字符在一个字符/字节上编码,例如“é”,“è”,“à”,“ù”
  • 存在一些非ASCII字符,例如“ç”,“ê”,“ô”消耗固定数量的90个字符/字节+每个字符1个字节
  • 第二个“ç”,“ê”等的存在仅消耗1个额外字节。

所以我想知道消息是如何编码的,因为我看不到上面的方案与我所知的传统编码(iso-8859-1,UTF-8,UTF-16 ......)相匹配。

3 个答案:

答案 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)。