好了,我们已经基本上分析清楚了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网发送模块,这样就绕过了输入问题。
未完,待续。

你好!我的8830安装了USC0.03最新版,收到短信提示“Uncaught exception:java.lang.error”,请问我怎么解决啊?
@take5,
非常感谢您的关注,由于我们手头没有8830,所以一直没有专门针对8830开发程序(没法测试),cuSMS目前还是针对9530开发的,有些朋友说8830上可以使用,那是因为我们是基于JDE 4.7开发的,估计有一定的通用性,所以你这个问题,暂时不能给您准确的答复,很抱歉。保持联系,保持交流!
你好,我是8830 sprint , 我们还有一个专门的8830 的群:74737834 大家都为C网汉语短信的 问题,愁破了头,能不能帮帮忙 开发一个8830 专用的啊, 虽然8830 较低端,但莓友还是很多的。如果可以的话 真是太感谢了。
@So一下子,
你好!你说的专用,有什么要求呢?