SIM卡中UCS2编码的三种格式(80,81,82)分析

http://hi.baidu.com/yourenpa/item/51067e2ae6f001c2ee10f1df


操作SIM卡中的数据操作主要有两个地方,一个是短信操作,还有一个通讯录操作,两种编码略有差别:
1、短信息操作:
    在短信息中,默认一条短信的最大长度为140个字节。
    纯ASCII字符主要采用7-bit编码格式,即只是利用了字符的后7位数据,这样160个ASCII字符只占用140个字节。这样我们手机的一条短信就可以发送160个ASCII字符了。
    包含汉字的字符采用UCS2编码格式,即UNICODE的2字节编码格式。样每个字符占用两个字节,只要短信中包含中文,整条短信的字符都要采用UCS2编码,这样一条短信最多就只能发送70个字符了。
2、通讯录操作:
    通讯录中的姓名长度限制不一样,本人使用的TD模块限制长度为14个字节。
    单独的ASCII字符正常都使用8-bit编码格式,即每个字节都占用8位,这也是最为正常的存储格式了。
    如果包含中文等字符,则正常采用80编码格式,即整个姓名字符以80开头,后面跟上UCS2数据,但有些情况下又会采用81或者82开头。
  a) 80 开头:
    80开头的为ucs2格式(注意:后面的字符必须有中文才行,否则可能是以80开头的纯ASCII字符串),大头在前,小头在后。
    例1:中国
    UNICODE编码为:4E2D56FD
    用ucs2的80方案表示是:804E2D56FD
    例2:杜10娘
    UNICODE编码为:675C003100305A18
    用ucs2的80方案表示是:80675C003100305A18
    显然只要有中文,数字也得占用两个字节。


   b) 81 开头:
     81开头的格式中,包含一个基址(一个字节)。有这个基址,就可以用一个字节表示一个ucs2字符了。
     在格式上,81是标识,后一个字节表示整个字符串长度,再后面一个字节是基址,再往后的就都是数据了。先举一例:
     例3:杜杜杜
     UNICODE编码为:675C675C675C
     用ucs2的80方案表示是:80675C675C675C
     用ucs2的81方案表示是:8103CEDCDCDC
     分析一下UCS2的81方案:8103CEDCDCDC
     81:为标记
     03:表示整个字符串为3个字符
     CE:一个字节为基址。解析的方法为:将基址(CE)左移七位,并在最高位添加一个0(这样就16位啦)。此时基址变为0x6700,然后再判断后面的数据字节。
     DCDCDC:3个数据字节 DC, DC, DC 。如果数据字节的最高位为0,则认为此字节是一个ASCII字符。如果数据字节的最高位为
     1,则低7位为基址的一个偏移,实际的UCS2字符为基址加上这个偏移值。由于此处三个数据字节最高位都为1,则实际的3个字符的
     偏移值为:5C, 5C, 5C。实际的UCS2编码为: 0x675C 0x675C 0x675C, 此处我们就看的明白了。
     例4:一丁丂七丄丅               (注:这些字符属于GBK字符集)
     UNICODE编码为:4E004E014E024E034E044E05
     用ucs2的80方案表示是:804E004E014E024E034E044E05
     用ucs2的81方案表示是:81069C808182838485
     分析一下UCS2的81方案:81069C808182838485
     81:为标记
     06:表示整个字符串为6个字符
     9C:一个字节为基址。解析的方法为:将基址(9C)左移七位,并将最高位置为0,最低位再补一个0(这样就16位啦)。此时基址
     变为0x4E00,然后再判断后面的数据字节。
     808182838485:6个数据字节 80,81,82,83,84,85 。由于此处六个数据字节最高位都为1,则实际的6个字符的偏移值为:00, 
     01,02,03,04,05。实际的UCS2编码为:0x4E00,0x4E01,0x4E02,0x4E03,0x4E04,0x4E05。 OK。
 
   c) 82 开头:
     82开头的格式中,包含一个基址(两个字节)。有这个基址,就可以用一个字节表示一个ucs2字符了。
     在格式上,81是标识,后一个字节表示整个字符串长度,再后面两个字节是基址,再往后的就都是数据了。先举一例:
     例5:8025EF芳
     UNICODE编码为:00380030003200350045004682B3
     用ucs2的80方案表示是:8000380030003200350045004682B3
     用ucs2的81方案表示是:(因为格式的限制,最多容纳128个中文和127个英文,所以此处无法用81格式表示)
     用ucs2的82方案表示是:82078280383032354546B3
     分析一下UCS2的82方案:82078280383032354546B3
    82:为标记
     07:表示整个字符串为7个字符
    8280:两个字节为基址。
     383032354546B3:7个数据字节 38,30,32,35,45,46,B3。如果数据字节的最高位为0,则认为此字节是一个ASCII字符。如果
     数据字节的最高位为1,低7位为基址的一个偏移,实际的UCS2字符为基址加上这个偏移值。由于此处七个数据字节的前六个字节最高
     位为0,所以表示6个ASCII字符0x38,0x30,0x32,0x35,0x45,即8,0,2,5,E,F。第七个字节的最高位为1,则此数据的
     偏移值为0x33,需要加上基址 0x8280,UCS2编码为0x82B3(芳)
     例6:杜杜1
     UNICODE编码为:675C675C0031
     用ucs2的80方案表示是:80675C675C0031
     用ucs2的81方案表示是:8103CEDCDC31
     用ucs2的82方案表示是:82036700DCDC31
     分析一下UCS2的82方案:82036700DCDC31
     82:为标记
     03:表示整个字符串为6个字符
     6700:两个字节为基址。
     DCDC31:36个数据字节 DC,DC,31。由于此处三个字节的前两个字节最高位为1,则此数据的偏移值为0x5C,需要加上基址
     0x6700,UCS2编码为:0x675C(杜)。第三个字节的最高位为0,所以表示一个ASCII字符:0x31,即 1。


     此处只是稍微分析了一下UCS2三种格式(80,81,82)的解码,想必知道了各个字段的含义,编码也就轻松多了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
手机SIM卡编码的秘密 国移动:手机SIM卡编码的秘密 如 8986 00 79 09 04 4 9311287 分段后的字符串意义分别如下: 8986代表国家国 00代表运营商国移动(好像02也是?) 79代表手机号码第三四位,如此卡为1379**** 09代表发卡省份编号,代码如下,为国移动内部使用,只能精确到省 -------------------------- 01:北京 02:天津 03:河北 04:山西& nbsp05:内蒙古 06:辽宁 07:吉林 08:黑龙江 09:上海 l0:江苏 11:浙江 12:安徽 13:福建 14:江西 15:山东 16:河南 17:湖北 18:湖南 19:广东 20:广西 21:海南 22:四川 23:贵州 24:云南 25:西藏 26:陕西 27:甘肃 28:青海 29:宁夏 30:新疆 31:重庆 另:13800138000充值卡的密码开头两位、系列号6、7两位都是用的这个省份编号 04代表发(制)卡年份2004年 1代表生产厂家,代码如下 -------------------------- 0:法国斯伦贝榭 厂家在湖南 1:法国GEMPLUS 厂家在天津(这种卡在芯片接触点上上都有GEMPLUS的标记,注意不是GSMPLUS) 2:德国欧伽(该代号后被武汉天喻替代) 3:江西捷德 4:东信和平 5:大唐电信 6:航天九洲通 7:北京握奇 8:东方英卡 9:北京华虹 A:上海柯斯 B:航天智通 后七位不详,比较随意,有时和手机号码最后若干位相同 国联通:手机SIM卡编码的秘密 如8986 01 04 05 021 063908 S 分段后的字符串意义分别如下: 8986代表国家国 01代表运营商国联通(另外CDMA是03) 04代表发(制)卡年份2004年 05代表手机号码第三四位,如此卡为1305**** 021代表发卡地区号,如上海021、杭州571……可以精确到城市,后六位比较随意 S代表生产厂家,代码如下 ------------------------ A:东方英卡 B:布尔公司 C:上海柯斯 D:欧贝特 E:东信和平 G:法国GEMPLUS H:北京华虹 S:法国斯伦贝榭 T:大唐电信 W:北京握奇 Y:武汉天喻 J:江西捷德
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值