gpt4 book ai didi

android - Android NDEF 记录负载中的奇怪字符

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:59:08 41 4
gpt4 key购买 nike

我刚开始使用 Android NFC 进行编码,我已经成功地将 NDEF 数据读写到 mifare classic 标签中。问题是当应用程序从 ndef 记录读取有效负载时,它总是在文本的开头包含字符“*en”。我认为它是语言字符,但是没有该字符如何获取真实的短信?

这是应用程序从标签中读取的屏幕截图,实际文本是“Hello World”

enter image description here这是要阅读的代码

@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();
}
}
}
}

最佳答案

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

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

第一个字节:控制字节

Bit 7: 0: The text is encoded in UTF-8 1: The text is encoded in UTF16

Bit 6: RFU (MUST be set to zero)

Bit 5..0: The length of the IANA language code.

后面是语言代码,按照 RFC 3066 中的定义存储在 US-ASCII(在您的情况下为 en)中。语言代码的长度在控制字节中给出。

然后是控制字节第 7 位指定格式的文本。

空方 block 字符来自您将原始数据转换为 UTF-8。我几乎可以肯定您的控制字节的数值为 2。由于该数值没有可打印字符,因此它会被 unicode 集中的不可打印占位符字符替换。这通常显示为一个空方 block 。

关于android - Android NDEF 记录负载中的奇怪字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7917567/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com