首页
社区
课程
招聘
[原创]彻底解决Android模拟器中文短信乱码问题
发表于: 2012-11-28 16:33 19802

[原创]彻底解决Android模拟器中文短信乱码问题

2012-11-28 16:33
19802

给模拟器发送短信的过程:

DDMS/Telnet->console->Kernel

发送短信导致乱码的地方在两个:

DDMS程序和console

短信乱码问题的原因:

中文短信是以ucs2编码,存储在pdu的usd区。

而传给系统的编码非ucs2。

第一步:

DDMS传给console的是GBK编码,console接收后前有底层统一转成UTF-8编码,至于为什么这里就不说了!

DDMS最后是用socket与console进行交互。UI操作以命令传给console;


默认发送时获取字节码的编码是ISO-8859-1。

所以我们做下修改:


console接收后由一个命令分发表转到sms_send


将字节码从utf-8流中解析出来


这里就出现了一个错误。汉字的UTF-8为三个字节。在做第二个和第三个自己读取前跳过了第二个。所以注释掉


顺便修改console发送时候的编码函数

方法同上

最后的步骤是用发送者号码和短信内容构建PDU短信;

smspdu_create_deliver_utf8-->smspdu_create_deliver-->gsm_rope_add_sms_deliver_pdu

我们主要关注gsm_rope_add_sms_deliver_pdu就行了

在这个函数中:主要涉及到PDU编码的知识,这个也不详细叙述,想了解的可以去百度;

根据代码分析,google在用户数据区前面多加了个长度信息。因为英文短信是从另外一个分支处理的,所以不受影响!


修改方法如图,注释掉那段代码!

OK,我们流程都打通了,现在就需要编译了。

编译我也说一句吧,需要编译模拟器emulator,sdk或者熟悉点的可以只编译ddms,然后拷贝到sdk。

好了,打完收工!你可以用telnet连接模拟器:telnet localhost 5554->sms send 10086 你好!

或者在DDMS那里发送,效果是一样的!

涉及文件:

external\qemu\telephony\sms.c

external\qemu\android\console.c

sdk\ddms\libs\ddmlib\src\com\android\ddmlib\EmulatorConsole.java

本文,是本人原创。转载请说明出处!

不好意思,可能图片挂了。大家可以看http://blog.csdn.net/tomhour/article/details/8234855


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 6
支持
分享
最新回复 (7)
雪    币: 24
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
本人技术有限,欢迎指正!
2012-11-28 17:06
0
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主图片看不到了。
2012-12-24 09:17
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
好贴,请更新图片
2012-12-25 16:17
0
雪    币: 24
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
可以看我的另一篇贴!http://blog.csdn.net/tomhour/article/details/8234855
2013-1-6 10:44
0
雪    币: 24
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
请看这里:http://blog.csdn.net/tomhour/article/details/8234855
2013-1-6 10:45
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
很好,收藏了,回家在详细研究。谢谢。
2013-2-4 12:36
0
雪    币: 3373
活跃值: (1368)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
8
话说 楼主 修复下论坛的图片吧 不要老跳到别的网站上 不习惯 有点给博客刷访问量的感觉
2013-2-4 12:43
0
游客
登录 | 注册 方可回帖
返回
//