EncodedTextLen (FIX tag 354)

LengthFIX 4.4FIX 4.2

EncodedTextLen (tag 354) is a Length field defined in FIX 4.4 and FIX 4.2. It appears in 71 message types, always optionally.

At a glance

Tag
354
Name
EncodedTextLen
Datatype
Length (int)
Dialects
FIX 4.4 and FIX 4.2
Messages
71

What the specification says

FIX 4.4

Byte length of encoded (non-ASCII characters) EncodedText (355) field.

FIX 4.2

Byte length of encoded (non-ASCII characters) EncodedText field.

Descriptions are quoted from the FIX Orchestra sources under the Apache 2.0 licence.

A real message using tag 354

NewOrderSingle · FIX 4.4
TagFieldWire valueMeaning
8BeginStringFIX.4.4
9BodyLength117
35MsgTypeDOrder – Single
49SenderCompIDBOARTEAM
56TargetCompIDCOUNTERPARTY
34MsgSeqNum2
52SendingTime20240101-12:00:00.000
11ClOrdIDORD-10042
54Side1Buy
60TransactTime20240101-12:00:00.000
40OrdType1Market
354EncodedTextLen7
10CheckSum007
Edit and decode it yourself

Shown with | separators for readability. On the wire FIX uses SOH (0x01), an invisible control byte — and because BodyLength and CheckSum are computed over the actual bytes, the two forms have different checksums. Both are valid and both decode here.

Open in the full decoder →

Generated from the FIX 4.4 dictionary and verified at build time: it parses and validates with no issues. Open the decoder to try your own message.

Where tag 354 appears

Requiredness is a property of the message, not of the field: the same tag can be optional in one message and conditionally required in another.

MessageMsgTypeFIX 4.4FIX 4.2Where in the message
Advertisement7ConditionalOptionaldirectly on the message body
AllocationInstructionJConditionalOptionaldirectly on the message body
AllocationInstructionAckPConditionalOptionaldirectly on the message body
AllocationReportASConditionaldirectly on the message body
AllocationReportAckATConditionaldirectly on the message body
AssignmentReportAWConditionaldirectly on the message body
BidRequestkConditionalOptionaldirectly on the message body
BidResponselConditionalOptionalinside the BidCompRspGrp component
BusinessMessageRejectjConditionalOptionaldirectly on the message body
CollateralAssignmentAYConditionaldirectly on the message body
CollateralInquiryBBConditionaldirectly on the message body
CollateralInquiryAckBGConditionaldirectly on the message body
CollateralReportBAConditionaldirectly on the message body
CollateralRequestAXConditionaldirectly on the message body
CollateralResponseAZConditionaldirectly on the message body
ConfirmationAKConditionaldirectly on the message body
ConfirmationAckAUConditionaldirectly on the message body
ConfirmationRequestBHConditionaldirectly on the message body
CrossOrderCancelReplaceRequesttConditionalinside the SideCrossOrdModGrp component
CrossOrderCancelRequestuConditionalinside the SideCrossOrdCxlGrp component
DerivativeSecurityListAAConditionalinside the RelSymDerivSecGrp component
DerivativeSecurityListRequestzConditionaldirectly on the message body
DontKnowTradeQConditionalOptionaldirectly on the message body
EmailCConditionalOptionalinside the LinesOfTextGrp component
ExecutionReport8ConditionalOptionaldirectly on the message body
IOI6ConditionalOptionaldirectly on the message body
ListCancelRequestKConditionalOptionaldirectly on the message body
ListExecuteLConditionalOptionaldirectly on the message body
ListStatusNConditionalOptionalinside the OrdListStatGrp component
ListStatusRequestMConditionalOptionaldirectly on the message body
ListStrikePricemOptionalOptionalinside the UndInstrmtStrkPxGrp component
Logout5ConditionalOptionaldirectly on the message body
MarketDataIncrementalRefreshXConditionalOptionalinside the MDIncGrp component
MarketDataRequestRejectYConditionalOptionaldirectly on the message body
MarketDataSnapshotFullRefreshWConditionalOptionalinside the MDFullGrp component
MassQuoteAcknowledgementbConditionaldirectly on the message body
MultilegOrderCancelReplaceACConditionaldirectly on the message body
NewOrderCrosssConditionalinside the SideCrossOrdModGrp component
NewOrderListEConditionalOptionalinside the ListOrdGrp component
NewOrderMultilegABConditionaldirectly on the message body
NewOrderSingleDConditionalOptionaldirectly on the message body
NewsBConditionalOptionalinside the LinesOfTextGrp component
OrderCancelReject9ConditionalOptionaldirectly on the message body
OrderCancelReplaceRequestGConditionalOptionaldirectly on the message body
OrderCancelRequestFConditionalOptionaldirectly on the message body
OrderMassCancelReportrConditionaldirectly on the message body
OrderMassCancelRequestqConditionaldirectly on the message body
PositionMaintenanceReportAMConditionaldirectly on the message body
PositionMaintenanceRequestALConditionaldirectly on the message body
PositionReportAPConditionaldirectly on the message body
QuoteSConditionaldirectly on the message body
QuoteRequestRConditionaldirectly on the message body
QuoteRequestRejectAGConditionaldirectly on the message body
QuoteResponseAJConditionaldirectly on the message body
QuoteStatusReportAIConditionaldirectly on the message body
Reject3ConditionalOptionaldirectly on the message body
RequestForPositionsANConditionaldirectly on the message body
RequestForPositionsAckAOConditionaldirectly on the message body
SecurityDefinitiondConditionalOptionaldirectly on the message body
SecurityDefinitionRequestcConditionalOptionaldirectly on the message body
SecurityListyConditionalinside the SecListGrp component
SecurityListRequestxConditionaldirectly on the message body
SecurityStatusfConditionaldirectly on the message body
SecurityTypeRequestvConditionaldirectly on the message body
SecurityTypeswConditionaldirectly on the message body
SettlementInstructionsTConditionaldirectly on the message body
TradeCaptureReportAEConditionalinside the TrdCapRptSideGrp component
TradeCaptureReportAckARConditionaldirectly on the message body
TradeCaptureReportRequestADConditionaldirectly on the message body
TradeCaptureReportRequestAckAQConditionaldirectly on the message body
TradingSessionStatushConditionalOptionaldirectly on the message body

Wire format

A byte count for the length-prefixed field that follows it. Count bytes, not characters — a multi-byte UTF-8 value makes the two differ. @boarteam/fix parses the value as a number and reports parse/invalid-int when it does not lex as one; the raw string is kept either way.

Read tag 354 in TypeScript

decode.tsts
import { createFixEngine } from "@boarteam/fix";import { dictionary } from "@boarteam/fix-dict-fix44";const fix = createFixEngine(dictionary);const { message, issues } = fix.parse(raw);const field = message.fields[354];field?.name;   // "EncodedTextLen"field?.raw;    // the verbatim wire stringfield?.value;  // coerced to a number

Other Length fields

Decode this in your own code

The same engine that produced the decoded example above is an Apache-2.0 npm package with zero runtime dependencies. It runs in Node and in the browser, and parse() returns problems as data instead of throwing.

npm i @boarteam/fix @boarteam/fix-dict-fix44