您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2025/3/4 8:15:06发布20次查看
http://hi.baidu.com/youren4548/blog/item/fa08bd1bf61005058618bf1d.html 操作sim卡中的数据操作主要有两个地方,一个是短信操作,还有一个通讯录操作,两种编码略有差别: 1、短信息操作: 在短信息中,默认一条短信的最大长度为140个字节。 纯ascii字符
http://hi.baidu.com/youren4548/blog/item/fa08bd1bf61005058618bf1d.html
操作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,最低位再补一个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)的解码,想必知道了各个字段的含义,编码也就轻松多了。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product