Android NDEF记录有效负载上的奇怪字符

Lor*_*. T 8 android nfc ndef

我刚刚开始使用Android NFC编码,我已成功读取和编写NIFF数据到mifare经典标签.问题是当app从ndef记录中读取有效负载时,它总是在文本的开头包含字符'*en'.我认为这是语言特征,但如何获得没有该字符的真实短信?

这是截图从标签读取的应用程序,实际文本是"Hello World"

在此输入图像描述 这是要阅读的代码

@Override
public void onNewIntent(Intent intent) {
    Log.i("Foreground dispatch", "Discovered tag with intent: " + intent);
   // mText.setText("Discovered tag NDEF " + ++mCount + " with intent: " + intent);

    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
        Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

        if (rawMsgs != null) {
            NdefMessage[] msgs = new NdefMessage[rawMsgs.length];

            for (int i = 0; i < rawMsgs.length; i++) {
                msgs[i] = (NdefMessage) rawMsgs[i];
            }

            NdefMessage msg = msgs[0];

            try {
            mText.setText(new String(msg.getRecords()[0].getPayload(), "UTF-8"));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Nil*_*nck 14

您所看到的是转换为UTF8的NDef文本记录的原始数据.

NDef文本记录是这样构建的:

第一个字节:Control-Byte

位7:0:文本以UTF-8编码1:文本以UTF16编码

第6位:RFU(必须设置为零)

位5..0:IANA语言代码的长度.

接下来是语言代码,存储在US-ASCII(在您的情况下为en)中,如RFC 3066中所定义.语言代码的长度在控制字节中给出.

接下来是控制字节的第7位指定格式的文本.

空方字符来自您将原始数据转换为UTF-8.我几乎可以肯定你的情况下的控制字节有数值2.由于这个数值没有可打印的字符,它将被unicode-set中的不可打印的占位符字符替换.这通常显示为空方块.

  • 下次,请将值复制并粘贴到您的答案中,而不是链接。两个链接都失效了!! (3认同)