我正在写一个NFC标签的URL(在URI记录中)。我的问题是,当我读取芯片时,在“www”之后添加“%20”。在URL的剩余部分之前。
网址如下所示:
www.%20google.ca
它实际上应该是这样的:
www.google.ca
下面的代码是我用来将URL写入芯片的写入功能:
String copy = txtTagContent.getText().toString();
byte[] uriField = copy.getBytes(Charset.forName("US-ASCII"));
byte[] payload = new byte[uriField.length + 1]; //add 1 for the URI Prefix
payload[0] = 0x01; //prefixes http://www. to the URI
System.arraycopy(uriField, 0, payload, 1, uriField.length); //appends URI to payload
NdefRecord rtdUriRecord = new NdefRecord(
NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], payload);
NdefMessage message = new NdefMessage(rtdUriRecord);
Ndef ndef = Ndef.get(tag);
ndef.connect();
ndef.writeNdefMessage(message);
ndef.close();
这个问题有解决方法吗?
答案 0 :(得分:0)
将URI记录写入NFC标记或接收方的方法都不会在URL中神奇地添加空格(%20)。自“http://www。”由前缀字节()指定,空格可能已输入文本字段(
0x01
)。您可以使用txtTagContent
方法删除任何前导和尾随空格:
trim()
您可能还想考虑已包含特定前缀的URL字符串:
String copy = txtTagContent.getText().toString().trim();
最后,请注意URI记录中的URL必须是UTF-8编码的(而不是您当前使用的US-ASCII):
byte prefixByte = (byte)0x01;
if ("http://www.".equals(copy)) {
prefixByte = (byte)0x01;
copy = copy.substr(11);
} else if ("https://www.".equals(copy)) {
prefixByte = (byte)0x02;
copy = copy.substr(12);
} else if ("http://".equals(copy)) {
prefixByte = (byte)0x03;
copy = copy.substr(7);
} else if ("https://".equals(copy)) {
prefixByte = (byte)0x04;
copy = copy.substr(8);
}