This post was originally written for Iguana 5 so it contains version 5 screenshots, and may contain out of date references.
We had a customer with a special case where they needed to include the “&” character in an HL7 code field (the Identifier field in an OBX segment). However the “&” is an HL7 delimiter and therefore it is encoded as “\T\” when it is included within a field in an HL7 node tree (as specified by the HL7 standard). In 99.9% this is the behaviour you want, however in this case the customer was dealing with a legacy system that expected an “&” at the start of the field.
The solution is simple: Convert the message to text and then replace the encoded text “\T\” with an “&”.
Note: This code is not production ready you will need to adapt it to your needs and test it before using it in a production system.
Here is an example that does that:

Here is the code and a sample message containing “\T\” SampleData.txt:
You can also load this project preventEscaping that contains the code and message.
function main(Data)
local Msg, Name = hl7.parse{vmd='example/demo.vmd', data = Data}
local Out = hl7.message{vmd='example/demo.vmd', name = Name}
Out:mapTree(Msg)
-- message processing goes here...
local S = Out.OBX:S()
trace(S)
-- This will "unescape" \T\ at the start of any segment
-- not just OBX - you can add extra logic if needed
S = S:gsub('|\\T\\','|&')
trace(S)
end
function string.startsWith(s,c)
if s:find(c,1,true)==1 then return true end
end
Please contact support at support@interfaceware.com if you need more help.