我刚刚开始使用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中的不可打印的占位符字符替换.这通常显示为空方块.
| 归档时间: |
|
| 查看次数: |
5586 次 |
| 最近记录: |