【问题标题】:NFC NDEF writing on IOS EncodingNFC NDEF 写入 IOS 编码
【发布时间】:2019-09-26 11:36:58
【问题描述】:

我正在开发一个可以读取和写入 NFC 标签的颤振应用程序。在 Android 上它工作得很好。现在我正在努力在 IOS 上实现 NFC 写入,因为它现在可用。

我确实让应用程序将文本记录写入标签。但不知何故,它是用 UTF16 编写的,这让事情变得支离破碎。

如何使用 UTF-8 编码的字符串创建 NFCNDEFPayload.wellKnownTypeTextPayload??

【问题讨论】:

  • 如何让应用程序将文本记录写入标签?比如使它成为 UTF16 的代码是什么?
  • 嗨,我设法使用 NFCNDEFPayload.init 构造函数而不是 NFCNDEFPayload.wellKnownTypeTextPayload 来解决它。
  • 您可以发布您的代码作为答案吗?我很难做到。当我使用它制作有效负载时,它的数据前面没有“en”,如果我写“enHello”,那么文本是 en hello 而不是 hello。
  • 当然,我现在就是这样做的。我不确定语言环境是否。但在我的用例中我不需要它。让 textPayload2 = NFCNDEFPayload.init(格式:NFCTypeNameFormat.nfcWellKnown,类型:Data.init(计数:0),标识符:Data.init(计数:0),有效负载:tmpMessage.data(使用:.utf8)!,块大小: 0)

标签: ios flutter core-nfc


【解决方案1】:

您已经完成了大部分工作。这是一个完整的工作示例,它修复了一些问题(特别是缺少“类型”说明符和语言环境使用):

var payloadData = Data([0x02,0x65,0x6E]) // 0x02 + 'en' = Locale Specifier
payloadData.append("Text To Write".data(using: .utf8)!)

let payload = NFCNDEFPayload.init(
    format: NFCTypeNameFormat.nfcWellKnown,
    type: "T".data(using: .utf8)!,
    identifier: Data.init(count: 0),
    payload: payloadData,
    chunkSize: 0)

请注意,这会将语言环境设置为“en”。

我已经在 iPhone 和 Android 上测试了使用此代码创建的标签,它似乎工作正常。

【讨论】:

  • 谢谢。太好了!
  • @Phil Powers for var payloadData = Data([0x02,0x65,0x6E]) 0x02 应该代表什么?会一直这样吗? 0x65 和 0x6E 是“en”的 UTF NSData 吗?
  • 是 - 0x02 是指示语言区域设置的前缀。 0x65 和 0x6E 是 'e' 和 'n' 的 ASCII 值 - 所以我想如果你需要支持英语以外的语言环境,你可以指定一个两个字符的语言字符串并将其转换为数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
  • 1970-01-01
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多