设为首页收藏本站

黑莓手机论坛-黑莓论坛

 找回密码
 注册(不定时开放注册)

QQ登录

只需一步,快速开始

98 0701
79 72
全新黑莓9900双电双充2699成都黑莓旗舰店赛格4楼3038
查看: 972|回复: 3

黑莓短信文章(三)转载! [复制链接]

Rank: 1

在用的BB
9630
金币
819
注册时间
2010-3-31
帖子
47
积分
126
UID
668856
发表于 2011-3-15 05:16:26 |显示全部楼层
注:本文写于2009年12月17日,当时的BB 9530 CDMA下中文短信还存在一些乱码的问题,我写此文,是为了向广大莓友解释BB CDMA下为什么会存在中文短信乱码的问题,此系列文章共5篇,本文为第3篇。目前,9530的CDMA中文短信问题已成为历史,但据广大莓友反应,这些问题现在在8330等其他机型上还是存在的,因此我特意转贴此文,希望能为朋友们化解一些心头的疑惑,不做它用,谢谢!
另:对技术或事物现象的本质感兴趣的朋友可以阅读此文,如果您仅仅想解决目前所遇到的问题,就不必浪费时间了,因为本文只是讲解和分析原理,探索问题的本原,不是解决问题的操作手册,谢谢大家!
本文原发于http://honeyhan.cn/

好了,我们已经基本上分析清楚了BB C网中文短信乱码的产生原因、重新解码的方法、短信长度不足的原因。下面补一张图,我们重新解码,尽全力抢救出来的“你好你好你好你好你好”这条短信,只能做到这样了(只能看到4个汉字而已):


在开始下一个话题之前,我们简单探讨一下,如何更进一步地解决这个问题。
经过上述分析,我们知道了,通过我们自己编写程序来“接收”到的短信,无论怎么处理,它只有3.5/8的原始数据,所以,这条路已经走到尽头了。
而截获BB收到的数据再处理,这一条路也不可能,因为我们自己收,跟BB收,其实是一样的,BB拿到的数据并不比我们多。
我们收到的数据少,短信中心(其实这个名称不准确)的数据是完整的,我们怎么才能收到更多呢?
分析我们的程序,发现我们的“接收”,只是调用BB提供的一个接口功能而已,如果我们能进行更加底层的程序设计,自己实现一个“接收”接口,这个接收接口,会检查短信的编码格式、会根据编码格式计算短信的“字节数”,那么,是可以完全恢复这条短信的。
如何实现自己的“接收”接口呢?这需要两个条件,一个是从底层挖掘CDMA短信的通信协议,另一个是,BB的开发包以及BB的运行环境都提供相关的支持,允许我们从底层重建代码,并确保其能够移植到BB设备上正常工作,可惜的是,我个人对这两条都没有相关资料,从黑盒分析摸索的路上,我只能走到这里了,非常抱歉。另外一个原因,是我触碰不到BB的底层系统,不能进行底层的开发,只能用java在应用层的“伪底层”折腾,如果允许我们用C、C++甚至汇编进行真正的底层开发,那样会好很多。
这条路走不通,还有别的路吗?是的,还有。
我们推测了BB接收短信的过程,其中重要的地方是“字节数”和“编码格式”,它都错误。“编码格式”,BB不去看,我们可能没什么办法;而“字节数”,在接收时,一定是在内存中的一个数值,如果能找到这个数值,并在其生成时立即篡改它(修改内存),那么BB会多收一些数据的。这个呢,由于我对java也是现学现用的,不太清楚java如何进行内存的越界访问和修改,并且我也怀疑java是否能做到这个,所以,也就不研究了。
以上为理论分析,仅作为与爱思考的朋友们的讨论而已。
进入下一个话题:

三、在4.7的ROM下,为什么无法发送中文短信
既然我们可以写程序接收短信,那我们一定可以写程序发送短信。
我们收不到对方发过来的东西,不能看到它的编码格式;可是我们应该可以控制我们发送的所有内容和数据啊。那是不是可以发送“中文”短信呢。
是的,应该是这样,那我们试试看。
这里有两个问题需要我们验证。
一个是,BB接收的时候,会按照7bit来处理字节,我们发送的时候,如果它也当7bit处理,会导致我们的每个字节都会被“斩首”;
另一个是,我们必须设置我们短信的编码格式,这样接收到的手机才知道如何解码。
经过验证(这里不写具体验证方法了,很简单的,几行小代码而已),第一个担心是不必要的,BB会把我们设置好的短信内容完整地发出去,不会“斩首”,比如我们发“你好”的Unicode编码,对方收到的就是“O`Y}”,数据本身是“无损”的;
而第二个问题,很严重,只要在程序里设置了非4的编码格式,BB的发送模块就不工作了,而设置4的话,接收到的手机会把短信当作ASCII来处理,尽管内容是正确的,“O`Y}”这4个ASCII码,按照Unicode解码,再按照中文显示,直接就是“你好”两个汉字了。

关于第二个问题,我尝试了很多很多方法,无论在什么阶段、什么级别设置,只要把这个标志位改掉,最后短信一定发不出去。

顺便说一下BB的G网中文短信。
大家都知道,BB在G网是可以正常接收中文短信的。
从程序设计的角度来说,如果我在BB上开发短信程序,在接口方面有两个选择,一个是用MessageConnection,一个是用DatagramConnection,而经过我的测试,在C网下,后者可以正常工作,前者无法工作;而前者的实现,实际上是完整的,也就是说,它可以接收、发送中文短信,只是很可惜无法在C网工作。
根据我的测试,在G网下,如果用MessageConnection来实现的话,是可以设置短信编码格式并成功发送中文短信的;而4.7ROM下之所以无法直接发中文短信,是因为“编辑输入”的问题。
BB的那个编辑框,没有考虑到输入中文(或其他非ASCII字符)的需要,如果输入中文,会变成“?”这个跟短信的发送并没有什么关系。实际上BB的G网发送模块是正常的,只是无法输入中文,也就无法设置其编码方式;如果你有办法输入中文,并设置好这条中文短信的编码方式UCS2,那么就可以正常发送了。
这个“输入”有几种办法:
1、              接收到的短信,直接转发,这样不需要你输入,这个短信是现成的,你只要命令BB发送就可以了——现在大家知道为什么G网可以转发中文短信,却不能编写发送了吧?
2、              自己写一个程序,设置一个编辑框,这个编辑框可以输入中文,然后再设置短信编码格式,并调用BB的G网发送模块,这样就绕过了输入问题。
[未完待续]

Rank: 1

居住地
日照市
在用的BB
8330
金币
242
注册时间
2011-12-20
帖子
116
积分
32
UID
1497981
发表于 2011-12-20 10:22:13 |显示全部楼层

使用道具 举报

Rank: 2

金币
2925
注册时间
2009-6-17
帖子
465
积分
220
UID
412142
发表于 2012-1-29 14:58:57 |显示全部楼层

使用道具 举报

居住地
大庆市
在用的BB
三星i909
金币
144
注册时间
2012-1-14
帖子
6
积分
7
UID
1524310
发表于 2012-2-1 18:57:37 |显示全部楼层
协助查询黑龙江省电信五码  有需要请与我联系 联系电话18246955911     QQ2364020993 李明

使用道具 举报

声明:本论坛所有文章、软件、资源为会员所发布,会员拥有该内容的所有权力及责任!

Archiver|手机版|黑莓手机论坛 ( 蜀ICP备10016869号 )    

GMT+8, 2012-5-30 18:13 , Processed in 0.055765 second(s), 9 queries , Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部