0

早上好,我遇到了一个我不明白的问题,让我解释一下:

我正在开发一个基于微控制器 Arduino 和 Android 应用程序的项目。arduino 从 pop3 命令中恢复邮件并将它们发送到 Android 应用程序。两人只通过短信交流。

问题是:我通过 SMS Broadcaster 在 Android 上获取消息,然后恢复一个字符串(String)。

以下是邮件恢复对象的示例:

Re: [阶段] 技术=?iso-8859-1?Q?vari?= =?iso-8859-1?B?6WVz?=de 通讯

这给出了以下结果:

回复:[Stage] 各种技术交流

可能需要注意的是,在 ISO 中只有一些文本以两种不同的方式编码。

我的问题是:我如何解析文本?问题是使用短信传输我没有选择返回类型。这是我用来阅读短信的代码:

Bundle bundle = intent.getExtras();
    if (bundle != null) {
        Object[] pdus = (Object[])bundle.get("pdus");
        SmsMessage[] message = new SmsMessage[pdus.length];
        String messageBody = null;
        String phoneNumber = null;
        for (int i=0; i< message.length;i++) {

            message[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
        }
        messageBody = message[0].getMessageBody();
        phoneNumber = message[0].getDisplayOriginatingAddress();
        if (message.length > -1) {
            if (phoneNumber.equals(arduino)) {
                Toast.makeText(context, "New Data",Toast.LENGTH_SHORT ).show();
                //this.abortBroadcast();
                Log.d("BroadcastSMS", "***************phoneNumber:"+phoneNumber+" messageBody:"+messageBody);
                //TODO : ici, que faire du message "messageBody" pour l'interpréter.
            }
        }
    }

我发现自己已经将消息作为字符串。我的直觉是尝试将自己编码为“shell”,但我不明白在此示例中如何编码“ed”。澄清我的问题是:

  • 标签 ISO 中的“Q”和“B”有什么区别?

  • 在我的例子中,第二个标签应该是 ISO 代码“ed”(注意空格,如果单词是粘的)。但是我不是在一个十六进制代码[0-F] [0-F]之间对应的情况下,文字是:6WVz

但是我可能走错路了,如果您对这些问题有答案或其他方法可以帮助我吗?

无论如何提前谢谢你。

杰米

4

1 回答 1

0

它是RFC 2047编码字。Q指定引用可打印编码,而B用于 base64。

于 2013-04-04T10:29:21.520 回答