关于BlackBerry CDMA中文短信功能的分析(一)

十二月 15th, 2009 by Coolfrog
4

Coolfrog<coolfrog#gmail.com>

 

一直以来,使用BlackBerry CDMA模式的朋友都对其中文短信功能十分苦恼,hcs兄弟和我也都写过相关的小程序,作为接受中文短信的无奈之选,苦闷啊!

今天抽空写这篇文章,主要是给大家分析分析RIM的BlackBerry,其CDMA中文短信为啥总让人失望,进而理解我的观点——现在的BlackBerry CDMA手机,其中文短信问题的核心已经解决(我认为已经解决了98%),可以说,离完全支持中文短信,只差最后一步(还差2%)。

 

一、在4.7的ROM下,为什么接收到的中文短信都是乱码

非常感谢hcs兄弟,没有他,我就不可能开始这些分析,他开发了一个cSMS工具,作为接收中文短信的助手。

具体分析过程,是自己在RIM的BlackBerry JDE 4.7.0开发环境中开发了一个中文短信解码工具(更准确地说,是UCS-2短信解码工具),整个开发过程,其实就是分析过程;具体手段是以黑盒分析为主(测试、猜想、验证等)。

大家都知道,之前我们用4.7.0版本的ROM时,在C网下无法接受中文短信,全是乱码。

比如,我用其他手机给C网BB发一条短信,是5个“你好”,共10个汉字(“你好你好你好你好你好”)。结果BB收到的短信,显示如下:

01_recieve_error_coding

本章节主要分析为什么出现这个现象。

我们把整个过程分解为:编写-编码-发送-运营商转递-接收-解码-显示,一共7个步骤。

首先排除“显示”的问题,因为我刷的ROM是支持中文显示的,而且在G网下可以接受中文短信,且这个短信在C网模式下仍然可以在BB的短信程序中打开、阅读。

然后,排除“编写”、“编码”、“发送”、“运营商转递”问题,因为如果不是发给BB,而是发给我三星的CDMA手机,就是正常的,这些环节不可能出错。

只剩下“接收”和“解码”两个问题了。

如果“接收”本身错误就出错,那我们只能断了这个念头,不可能通过附加程序来解决接收乱码的问题了;但俺看到hcs兄写的程序,是可以部分解码的,所以,排除该问题。

好了,终于定位到“解码”上了,我们来深入分析。

我们知道发出去的内容,也看到了显示出来的内容,中间BB是怎么做的,需要黑盒分析。

我想先列出发出去的内容的2进制编码,然后看看收到的内容的2进制编码,再寻找其中的转换规律。

理论上这里得详细解释一下“字符”、“字符集”以及“编码”和“解码”的概念问题,但是,这实在不是一两句话可以说清楚的(从微软的《Windows程序设计》到《Windows多线程程序设计》,乃至看雪学院的《加密与解密》,开篇都离不开这个话题),在这里我就不说了,请看不懂的朋友参阅google相关搜索结果。

“你好”这两个字,在Unicode中,每个字都需要2个字节来表示,一共需要4个字节。其中“你”,用16进制的字节形式表示,就是4F 60,“好”就是59 7D(准确地说,是UTF-16,但大家只要记住这是Unicode就行了,不是专业人士没必要搞那么清楚)。

转换成2进制,4F 60 59 7D就是:

02

最简单的猜想,就是:BB是不是把这些东西,当做ASCII来处理了?本来两个字节构成一个中文字符的,如果BB把他们孤立开来看,当成2个ASCII字符来处理,就会产生乱码。

有了猜想,验证一下:

03

明显跟我们BB上看到的不一样,说明这个猜想不正确。

(其实早就可以排除了,因为我们发的是5个“你好”,如果上述猜想正确,不管是什么字符,至少应该是重复出现、有规律循环出现的才对,而我们看到的东西好像一点规律都没有。)

没办法了,从“你好”这一边出发,分析不下去了。

我们干脆到BB上把这些字符提取出来,看看能分析出什么来。

BB上显示的是:’Xj=@Y>S

把它们用16进制表示:27 58 6A 3D 40 59 3E 53

再用2进制表示如下:

04

好,数据齐全了,我们把开头的6个字节抽取出来,把它们列在一起,并取消横向隔断,直接对比,看看有什么规律:

05

当然,在上面的对比中,我已经增加了颜色和空白,指出了规律特征,大家能看出来吗?

我来用文字描述一下这个规律特征:

BB从收到的内容(2进制)中,以7bit为单位提取出来,并将每7bit的数据当做一个字节的ASCII字符,显示出来。

备注:按照这个规律推到,为什么上面表格中还有两个字符没有显示呢(00010110010111)?那是因为,这两个字节的内容,转换成十六进制是0B和17,都是“不可见字符”(例如控制字符),是不能直接打印、显示的。

真不错,我们现在已经分析出来一个问题了。

后面将要分析的问题包括:

一、在4.7的ROM下,为什么接收到的中文短信长度不足

二、在4.7的ROM下,为什么无法发送中文短信

三、现在的5.0ROM,做到了些什么

……

更多精彩,感谢关注。

相关日志

Posted in 技术探讨

4 Responses to “关于BlackBerry CDMA中文短信功能的分析(一)”

  1. Kaka CHINA 说:

    不错的技术分析文章 :D

  2. mhey CHINA 说:

    最新的9550rom已经可以中文短信了,麻烦版主看一下,如果最终9530和9550和9630都有了中文短信的rom,那么请版主搞下8830的中文短信,谢谢,一直在关注你的文章。

  3. renjiawonder CHINA 说:

    很好的技术文章,具体,切合实际

Leave a Reply