将 ASCII 10 (0A) 字符放置在 HL7 消息段内的某处以表示换行符。这是有效的吗?
据我所知,建议使用 \X0D\ 或 \X0D0A\ 来表示纯文本格式 HL7 的换行符。是否仅使用 0A ASCII 字符显式无效 HL7?
要回答“仅使用 0A ASCII 字符是否明确无效 HL7?”的问题:
HL7 规范中的任何地方都没有提到这个角色0A
是特殊的。
从 HL7 2.5 US 规范中提取:
2.5.4 消息分隔符
在构建消息时,会使用某些特殊字符。它们是段终止符、字段分隔符、组件分隔符、子组件分隔符、重复分隔符和转义字符。段终止符始终是回车符(在 ASCII 中,十六进制 0D)。其他分隔符在 MSH 段中定义,字段分隔符位于第 4 个字符位置,其他分隔符出现在称为编码字符的字段中,该字段是段 ID 之后的第一个字段。MSH 段中使用的分隔符值是整个消息中使用的分隔符值。在没有其他考虑的情况下,HL7 建议使用图 2-1 分隔符值中的建议值。
严格来说,这意味着您可以像使用0A
前面提到的 6 个字符以外的任何字符一样使用该字符。
<“正式”回复结束>
话虽如此,我同意 Dale H. 的观点,即您最好不要在 HL7 消息的内容中使用此字符。由于大多数编辑器(Windows 上的老式记事本除外)都会将此字符显示为新行,因此您可能会不情愿地认为段被截断或格式错误。而且我至少有一个实例,接口引擎确实将该字符作为段终止处理(这本身是无效的,并且接口引擎构建被修改为不再这样做)。
所以最好避免这种情况。但是在你不控制输出的情况下,它似乎不是一个正式禁止的角色......
HL7 消息中不允许有换行符 (0x0A)。如果您使用记事本、写字板和许多其他文本编辑器编辑消息,它们会将回车 (0x0D) 转换为 CR/LF (0x0D 0x0A),如果您保存,您现在会收到损坏的 HL7 消息。避免 LF (0x0A)。
如果您只发送0A
,则无法确定您想要 ASCII 10/换行符,并且会假定您想要一个零和一个 A。
转义字符为 的标准 HL7 \
,那么推荐的方式是\X0A\
。表示十六进制数据的\X
开头,后跟两个字符的十六进制值,以 . 结尾\
。
话虽如此,如果您将此数据发送到系统,那么他们应该能够告诉您他们接受哪些换行符。我见过使用\.br\
或重复字符~
来确定新行的系统。有时他们想要重复的片段。例如下面,每个 OBX 段是系统中报表的新行。
OBX|1|TX|||This is line one
OBX|2|TX|||This is line two