)
做 NFC 标签开发绕不开 NDEFNFC Data Exchange Format。这篇把 NDEF 的消息结构、两类最常用的 RecordURI / Text拆开讲清楚并给出字节级示例。1. NDEF 在标签里长什么样Type 2 TagNTAG 系列的存储区里NDEF 数据被封装在 TLV 块中2. NDEF Record 结构一条 NDEF 消息由若干 Record 组成单个 Record 的字段如下字段长度说明Record Header1 字节MB/ME/CF/SR/IL 位 TNF 低 3 位Type Length1 字节Type 字段长度Payload Length1 或 4 字节SR1 时用 1 字节短记录ID Length0 或 1 字节仅当 IL1 时存在Type变长记录类型如 UURI、TTextID变长可选Payload变长实际数据TNFType Name Format取值TNF含义典型用途0x00空空记录0x01Well-KnownURI、Text 等标准类型0x02Media-TypeMIME 数据如图片0x03Absolute URI绝对 URI0x04External自定义类型如厂商私有协议0x05Unknown未知类型3. URI Record写入网址TNF0x01TypeU。Payload 第一个字节是 URI 前缀编码后面跟剩余字符串前缀码代表前缀0x00无前缀0x01http://www.0x03http://0x04https://0x05tel:0x06mailto:写入https://example.com的完整 Payload 为这个前缀机制就是短链省空间的底层原因常用前缀被压缩成 1 个字节。4. Text Record写入文本TNF0x01TypeT。Payload 第一个字节是状态字节最高位编码方式0UTF-8低 5 位是语言码长度随后是语言码如 en/zh再接正文。写入 UTF-8 的 Hi语言码 en中文按 UTF-8 每个汉字 3 字节计入 Payload写长文本前先对照芯片容量。5. 容量对照NTAG 系列芯片总容量NDEF 可用约适配场景NTAG213144 B~130 B短网址、编号NTAG215504 B~480 B网址 文本说明NTAG216924 B~870 B较大信息量 / 多记录注意每条 Record 有数字节的头部开销多 Record 场景要把 overhead 算进去另外写入时避开 Capability Container第 0 页与动态锁字节。6. 读写工具手机端Android 用 NFC Tools 可直接写入/读出 NDEF 并查看原始字节适合调试PC 端nfcpyPython配合 NFC 读卡器几行代码即可读取标签内容写入则调用tag.ndef.records [ndef.TextRecord(...), ...]需标签未锁死。7. 常见坑iPhone 只能读不能写XS 之后支持后台读取写入操作需 Android 设备或发卡器标签一旦设置了动态锁/静态锁写入永久失效批量写入前先在小样上验证URI 前缀码选错会导致拼接出错误网址写入后务必用 NFC Tools 复查原始字节多 Record 时第一个 Record 置 MB1、最后一个置 ME1中间位置混乱会导致部分手机解析失败。以上格式表和字节示例可直接作为调试对照使用欢迎在评论区交流具体芯片型号的写入问题。