首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入短信的编码

输入短信的编码
EN

Stack Overflow用户
提问于 2012-10-19 11:15:06
回答 3查看 1.2K关注 0票数 2

我需要知道如何使用我的SmSMessage类在我的设备上获得输入短信的编码在我的广播接收机类中。

显然,我不能使用以下代码:

代码语言:javascript
复制
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];

for (int i = 0; i < msgs.length; i++) {
    msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
    msg_str += msgs[i].getMessageBody();
}
StringBufferInputStream buf = new StringBufferInputStream(msgs[0].getMessageBody());
InputStreamReader reader = new InputStreamReader(buf);
String encode = reader.getEncoding();

因为这将返回java的默认编码,即(UTF-8)。

我需要检查短信是在GSM78位,还是UTF-16编码。

EN

回答 3

Stack Overflow用户

发布于 2012-10-19 13:16:42

我们可以使用calculateLength类的SMSMessage函数。

这将返回一个int 4,其中int 0是SMS所需的数量,int 1是使用的代码单元数,int 2是直到下一条消息为止的代码单元数。int 3是应该用于消息的编码类型。

票数 3
EN

Stack Overflow用户

发布于 2012-10-19 11:19:01

我猜想,短信:s通常是用GSM 03.38编码的。这可能是Android文档中提到的“无线电专用编码”。

票数 1
EN

Stack Overflow用户

发布于 2013-05-29 18:31:45

安卓系统在ENCODING_16BIT类中已经有固定的定义ENCODING_7BITENCODING_8BITENCODING_UNKNOWN,这与3 3GPP 03.38中的数据编码方案相对应。然而,有趣的是,它们没有被用于公共方法的回报价值。

因此,最好的解决办法是:

  1. 使用getPdu()获取整个SMS TPDU字节
  2. 根据3 3GPP 03.40解析字节(第9节)以获得DCS字节(用于短消息传递:1字节TP-MTI/MMS/RP/UDHI/SRI,2-12字节TP-OA,1字节TP-PID,然后DCS字节)
  3. 根据3 3GPP 03.38第5节解析DCS字节。

解析DCS字节的示例代码如下所示:

代码语言:javascript
复制
public static byte getSmsDcsType(byte dcs)
{
    // Notes:
    // ------
    // the (SMS) DCS value according to 3GPP TS 03.38 / TS 23.038 is coded as follow:
    // 0xxx00xx = GSM 7-bit default alphabet (packed format)
    // 0xxx01xx = 8-bit data (unpacked-format)
    // 0xxx10xx = UCS2 uncompressed format
    // 0xxx11xx = reserved
    // 10xxxxxx = reserved
    // 110xxxxx = GSM 7-bit default alphabet (packed format)
    // 1110xxxx = UCS2 uncompressed format
    // 111100xx = GSM 7-bit default alphabet (packed format)
    // 111101xx = 8-bit data (unpacked-format)
    // 11111xxx = reserved

    if (((byte) (dcs & (byte) 0x8C) == 0x00)
            || ((byte) (dcs & (byte) 0xE0) == (byte) 0xC0)
            || ((byte) (dcs & (byte) 0xFC) == (byte) 0xF0))
    {
        return SmsMessage.ENCODING_7BIT;
    }
    else if (((byte) (dcs & (byte) 0x8C) == 0x04) || ((byte) (dcs & (byte) 0xFC) == (byte) 0xF4))
    {
        return SmsMessage.ENCODING_8BIT;
    }
    else if (((byte) (dcs & (byte) 0x8C) == 0x08) || ((byte) (dcs & (byte) 0xF0) == (byte) 0xE0))
    {
        return SmsMessage.ENCODING_16BIT;
    }

    return SmsMessage.ENCODING_UNKNOWN;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12973072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档