CoreNFC 短信只产生双字节字符?

Posted

技术标签:

【中文标题】CoreNFC 短信只产生双字节字符?【英文标题】:CoreNFC Text message produces double byte chars only? 【发布时间】:2020-05-31 17:48:19 【问题描述】:

我已成功连接(读取和写入)到 NDEF 标记。该标签是我的原型板上的 NXP 电子标签,我可以使用 I2C 协议读取它。我只处理纯文本消息。

写入标签虽然成功,但仅生成双字节字符文本。创建短信的方法是:

guard let testRecord = NFCNDEFPayload.wellKnownTypeTextPayload(
  string: String(describing: "blah blah".cString(using: String.Encoding.utf8)),
  locale: .current)
else  return 

并写入标签:

let myMessage = NFCNDEFMessage.init(records: [testRecord])
tag.writeNDEF(myMessage)

数据到达标签但被编码(看起来)为两个字节。具体来说,字符串 "blah blah" 中的每个字符都以 \x00 开头,从而导致 \x00 \b \x00 \l \x00 \a 等。

我认为如果仅使用 ASCII 集中的字符,.utf8 编码将下降到仅标准 ASCII(单字节)。

如何确保 NDEF 消息是用单字符 ASCII 编码的?

【问题讨论】:

【参考方案1】:

对于任何登陆这里的人,简短的回答是;是的,NFCNDEFPayload.wellKnownTypeTextPayload() 仅将字符串编码为 utf16(记录这个 Apple 的工作真好!)。为了解决这个问题,您需要通过构建自己的有效负载来降低一层。看看这个答案:NFC NDEF writing on ios Encoding

【讨论】:

以上是关于CoreNFC 短信只产生双字节字符?的主要内容,如果未能解决你的问题,请参考以下文章

Python学习笔记

Unicode是啥???

双字节距离显示一半的值

C# 结构到字节数组封送产生 19 个元素而不是 20 个

Apple Review - 未加载库:CoreNFC:找不到图像

获取字符串长度把双字节的替换成两个单字节的然后再获得长度