射频识别(RFID)技术

文本记录类型定义技术规范

译者:陈广 日期:2020-3-4


概览

文本记录类型(Text Record Type)描述为纯文本数据定义了 NFC 论坛知名类型[NFC RTD]。它可以用作 RFID 标签上其他对象的自由形式文本描述。

目标

本文件的目的是作为对 RTD 案文的规范性参考。

目的

任务说明和目标

文本 RTD 被设计成作为一个通用的文本字段,用于向 URL 等事物添加元数据。它需要提供具有明确定义语义的轻量级组件。

目标不是取代 text/plain,而是要定义一个清晰的子集,可以在没有太多空间可用的情况下使用,并涵盖最可能的用例。

文本 RTD 也必须适用于非西方语言,并且它需要包含用于本地化目的的语言信息,以便可以识别语言并为用户服务。

本节剩余略

文本记录

介绍

“Text”记录包含自由形式的文本。例如,它可用于描述服务或标签的内容。

文本记录可以作为 NDEF 消息[NDEF]中的唯一记录出现,但在这种情况下,行为是未定义的,由应用程序处理。通常,文本记录应与其他记录一起使用,以提供解释性文本。

依赖项

Text 元素没有依赖项。

安全考虑

可以在文本记录上写不同的文本,而不是标签实际做什么,从而欺骗用户做一些他实际想要做的事情(即钓鱼)。因此,用户界面只将文本字段用作信息字段是一个很好的想法。

NDEF 结构

消息传递序列

此 RTD 没有特定的消息传递序列可用。

记录映射

语法

文本记录的 NFC 论坛知名类型[NDEF]、[NFC RTD]为“T”(NFC 二进制编码为:0x54)。

数据内容如下:

表2:文本记录内容语法

偏移(bytes) 长度(bytes) 内容
0 1 状态字节。参考表 3
1 <n> ISO/IANA 语法码。例如:“fi”、“en-US”、“fr-CA”、“jp”。编码为 US-ASCII。
n+1 <m> 实际的文本。编码为 UTF-8 或 UTF-6,依赖于状态位

状态位编码在表 3 中描述。任何标记为 RFU 的值应当被忽略,任何编写这些位的软件都应使用这些位的值零。

表3:状态字节编码

位数(0 为低位) 内容
7 0:文本被编码为 UTF-8
1:文本被编码为 UTF-16
5..0 IANA 语言码的长度

文本字段的内容可以显示给用户。如果有多个“T”记录存在,则应当显示与用户偏好最为匹配的语言。如果在单一应用程序中存在多个文本元素,具有相同语言码的内容应当被当成错误。

控制字符(UTF-8 中的 0x00-0x1F)应当在显示之前被移除,除了新行、换行(0x0D、0x0A)和 tab(0x08)字符。不能嵌入标记(请使用“text/xhtml”或其他合适的 MIME 类型)。文本记录应视为等价于 MIME 类型“text/plain;format=fixed”。

文本中的断行必须使用 CRLF 表示(所谓的DOS约定,UTF-8 中的序列 0x0D,0x0A)。设备可以它希望的方式处理 tab 字符。

换行符和 tab 以外的空白应该折叠,例如,多个空格字符会被认为是单个空格字符。

为寻找实际文本以字节为单位的长度,你可以通过“m=(载荷长度 - IANA 语言码长度 - 1)”来计算长度。

结构

如果文本记录描述一个元素,它应该出现在它所描述元素之前的 NDEF 记录列表中。这使得它在元素非常大的情况下,以更快的速度查找并显示给用户。

语言码

所有语言码必须按照 RFC 3066[RFC 3066]进行。语言码不可省略。

语言码长度编码在状态字节的六个最不重要位中。因此,用 0x3F 掩蔽状态字节是很容易找到的。

语言码通常是 2 个字符或 5 个字符,尽管在未来,有可能有更长的代码。此时,IETF 正在考虑对 RFC 3066 进行扩展,该扩展将覆盖长度高达 33 个字节的语言代码[RFC 3066bis]。两字节版本忽略了所有方言,所以它使用得最频繁;例如,“fi”代表芬兰,“jp”代表日本,“fr”代表法国。尽管如此,在某些情况下,你可能希望区分同一语言的变体,如通过“en-US”和“en-UK”分别提供美国英语和英国英语版本。

UTF-16 字节序

必须容许实际字符串中的 Unicode 字节序标记(Byte-Order-Mark,BOM)(即,没有错误条件)。当生成一个文本记录,BOM 可能被忽略。如果 BOM 被忽略,字节序将为大端(UTF-16 BE)。

附录 A:UTF-8编码示例

这是一个使用英语将“Hello,world!”解析为 UTF-8 编码的示例:

表 4:示例“Hello,world!”

偏移 内容 解释 句法信息
0 N/A IL flag=0(无ID字段),SF=1(短格式) NDEF 记录首部
1 0x01 记录名称长度 NDEF 记录首部
2 0X10 载荷数据长度 NDEF 记录首部
3 "T" 在[1]中定义的名称的二进制编码 NDEF 记录首部
4 0x02 状态字节:这是 UTF-8,并且有两个字节的语言码 载荷
5 "en" “en”是英语的 ISO 码 载荷
7 "Hello,world!" UTF-8 字符串“Hello,world!” 实际的正文文本
;

© 2018 - IOT小分队文章发布系统 v0.3