1、问题现象:在使用Android模拟器发送或接收中文短信时,可能会出现乱码的情况。
2、影响范围:主要影响在模拟器上进行短信功能测试和调试的用户。
1、编码不匹配
原因:中文短信通常以UCS2编码存储在PDU的USD区,但传给系统的编码可能非UCS2。
具体表现:DDMS传给console的是GBK编码,而console接收后底层统一转成UTF-8编码,导致解析错误。
2、字节码处理不当
原因:在字节码解析过程中,可能存在对汉字UTF-8字节码的错误处理。
具体表现:汉字的UTF-8为三个字节,但在解析时可能跳过了第二个字节,导致乱码。
1、修改console字节码解析
方法:注释掉或修改console中关于字节码从UTF-8流中解析的相关代码。
目的:避免在解析字节码时跳过汉字UTF-8的第二个字节。
2、调整PDU编码
方法:在构建PDU短信时,确保用户数据区前面的编码信息与实际编码一致。
目的:解决因编码信息不一致导致的乱码问题。
3、编译并部署修改后的模拟器
方法:编译模拟器emulator或sdk,并将修改后的ddms拷贝到sdk中。
目的:使修改后的模拟器能够正确处理中文短信编码。
1、Q: 修改console字节码解析时,需要修改哪些文件?
A: 需要修改的文件包括externalqemutelephonysms.c、externalqemuandroidconsole.c以及sdkddmslibsddmlibsrccomandroidddmlibEmulatorConsole.java。
2、Q: 如何验证模拟器是否已正确处理中文短信编码?
A: 可以通过telnet连接模拟器(如telnet localhost 5554)并发送中文短信(如sms send 10086 你好!)来验证,如果短信在模拟器上显示正常,则说明模拟器已正确处理中文短信编码。