EncDotNet.Iso8211 0.8.0

dotnet add package EncDotNet.Iso8211 --version 0.8.0
                    
NuGet\Install-Package EncDotNet.Iso8211 -Version 0.8.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EncDotNet.Iso8211" Version="0.8.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EncDotNet.Iso8211" Version="0.8.0" />
                    
Directory.Packages.props
<PackageReference Include="EncDotNet.Iso8211" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add EncDotNet.Iso8211 --version 0.8.0
                    
#r "nuget: EncDotNet.Iso8211, 0.8.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package EncDotNet.Iso8211@0.8.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=EncDotNet.Iso8211&version=0.8.0
                    
Install as a Cake Addin
#tool nuget:?package=EncDotNet.Iso8211&version=0.8.0
                    
Install as a Cake Tool

EncDotNet.Iso8211

EncDotNet.Iso8211 reads and writes ISO/IEC 8211 files, the self-describing binary container used by IHO S-57 and S-101 charts and other data exchange standards. It decodes the Data Descriptive Record (DDR), data records, fields and subfield values, writes documents back out, and builds new ones. It has no knowledge of S-57; reference EncDotNet.S57 instead if you want chart features. The package targets .NET 8 and .NET 10.

Install

dotnet add package EncDotNet.Iso8211

Example: list the fields a file defines

using EncDotNet.Iso8211;

Iso8211Document document = Iso8211DocumentReader.ReadFromFile("path/to/file.000");
Iso8211DataDescriptiveRecord ddr = Iso8211DataDescriptiveRecordReader.Read(document.DataDescriptiveRecord!);

foreach (Iso8211FieldDefinition definition in ddr.FieldDefinitions)
{
    Console.WriteLine($"{definition.Tag}: {definition.FieldName} {definition.FormatControls}");
}

Console.WriteLine($"{document.DataRecords.Count()} data records");

Main entry points

Type Use it to
Iso8211DocumentReader Read a whole file into an Iso8211Document of records and fields
Iso8211DataDescriptiveRecordReader Decode the DDR into field definitions
Iso8211FieldReader Decode subfield values from a field using its definition
Iso8211Reader Scan a file token by token without building records (ref struct)
Iso8211DocumentWriter Write a document to bytes, a stream or a file
Iso8211DocumentBuilder, Iso8211RecordBuilder, Iso8211FieldBuilder Build records and fields to write
Iso8211DataDescriptiveRecordWriter Encode field definitions into a DDR

Reading and writing ISO 8211 covers each of these with examples.

Records longer than 99,999 bytes

A record leader carries its record's length in five numeric characters, so it can't express a record of 100,000 bytes or more. Producers that emit one, such as a dense inland ENC cell whose SG2D coordinate field runs to six figures, write 00000 there instead. The reader recognizes that and derives the length from the record's directory (the field area base address plus the sum of the field lengths), so Iso8211Leader.RecordLength reports the real length.

Iso8211DocumentWriter does the same in reverse: a record longer than 99,999 bytes is written with 00000 as its length, so such files round-trip byte for byte. The field area base address has the same five-digit limit but can't be left unspecified, because the reader needs it to find the directory. Building or writing a record whose directory pushes the base address past 99,999 throws InvalidOperationException.

License

MIT. See LICENSE.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.
  • net8.0

    • No dependencies.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on EncDotNet.Iso8211:

Package Downloads
EncDotNet.S57

A .NET library for reading and working with IHO S-57 Electronic Navigational Charts (ENCs), including feature records, vector topology, exchange sets, and incremental updates.

EncDotNet.S100.Datasets.S101

Libraries for manipulating S-100 based nautical charts.

EncDotNet.S100.Datasets.S57

Libraries for manipulating S-100 based nautical charts.

EncDotNet.S100.Datasets.Pipelines

Per-spec IDatasetProcessor implementations, the DatasetPipelineFactory (file -> processor detection), the headless image-render capability, the S-98 interoperability authority, and the validation runner for IHO S-100 product datasets. Consumed by the EncDotNet.S100 convenience package, the viewer, and the s100 CLI.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.8.0 0 10/12/2026
0.7.2 224 10/11/2026
0.7.1 52 10/11/2026
0.7.0 5,224 9/16/2026
0.6.1 111 9/16/2026
0.6.0 5,192 7/12/2026
0.5.1 6,929 6/18/2026
0.5.0 1,651 6/11/2026
0.4.3 2,545 5/19/2026
0.4.2 144 5/19/2026
0.4.1 1,882 5/7/2026
0.4.0 4,167 4/29/2026
0.3.6 132 4/11/2026
0.3.5 127 4/9/2026
0.3.4 426 4/9/2026
0.3.3 129 4/9/2026
0.3.2 132 4/8/2026
0.3.1 133 4/8/2026