Iconvex Standards

iconvex_standards adds the standards, registry, and archival codecs that do not belong in Iconvex Core. Pure Elixir code implements the package. It uses no NIF, port, or system iconv process.

The OTP application installs 248 collision-reviewed byte codecs and 205 table providers. It uses one transaction. Stopping the application removes that extension. A failed or conflicting installation rolls back all changes.

Install

def deps do
[
{:iconvex, "~> 0.1"},
{:iconvex_standards, "~> 0.1"}
]
end

Mix starts the application automatically:

{:ok, koi8} = Iconvex.convert("Привет", "UTF-8", "KOI8-F")
{:ok, "Привет"} = Iconvex.convert(koi8, "KOI8-F", "UTF-8")
{:ok, bootstring} =
Iconvex.convert("Καλημέρα 日本語", "UTF-8", "PUNYCODE")
{:ok, "Καλημέρα 日本語"} =
Iconvex.convert(bootstring, "PUNYCODE", "UTF-8")
{:ok, mailbox_name} =
Iconvex.convert("旅行/日本", "UTF-8", "UTF-7-IMAP")

The package supports all standard Iconvex conversion policies. These policies include strict errors, discard, byte substitution, and Unicode substitution.

Package contents

The frozen package manifest contains:

SurfaceCountHighlights
Registered byte codecs248143 RFC 1345 sets, ISO-IR, ISCII, Punycode, IMAP UTF-7, VIQR, VSCII-2, PASCII, KOI, Kermit, TACE-16
Table providers205Package-local, immutable ETF lookup tables
Packed profiles5ECMA-1 six-bit plus four seven-bit profiles, each MSB- and LSB-first
Property-token mappings4Unicode 17 mainland/Taiwan telegraph and kGB3
Raw transports2ECMA-44 seven- and eight-bit punched-card combinations
Cataloged quarantine2Fully mapped RFC 1345 tables that the package does not register

The package contains 143 registered RFC 1345 codecs and 14 IANA PCL symbol sets. It contains 12 modern ISO-IR sets and seven CNS 11643 sets. It also contains six historical graphic sets and five mosaic or technical sets. The package also includes four Unicode legacy mappings, three JIS X 0213 sets, and two KPS 9566-97 profiles.

Notable algorithmic and source-qualified codecs include:

Iconvex.Standards.encodings/0 returns the exact registered canonical names. Iconvex.Standards.registrations/0 also exposes aliases and source provenance. SURFACE_MANIFEST.tsv provides the machine-readable ownership authority.

Odd-width transports

The byte codec API represents one six-bit or seven-bit unit per octet. Use the explicit packed facade for wire formats.

alias Iconvex.Standards.Packed
{:ok, bits} =
Packed.encode_from_utf8("ABC", "ECMA-1-PACKED-MSB")
{:ok, "ABC"} =
Packed.decode_to_utf8(bits, "ECMA-1-PACKED-MSB")
{:ok, lsb_transport} =
Packed.encode_from_utf8("Привет", "SHORT-KOI-PACKED-LSB")
{:ok, "Привет"} =
Packed.decode_to_utf8(lsb_transport, "SHORT-KOI-PACKED-LSB")

The facade returns LSB-first data as Iconvex.Packed.LSB. The value retains the exact bit length, unit width, and bit order. Do not pass :lsb with an explicitly named MSB profile. The reverse mismatch is also invalid.

Unicode property tokens

Unihan telegraph and kGB3 values are single property tokens. Therefore, they implement Iconvex.Standards.PropertyTokenMapping, not Iconvex.Codec.

alias Iconvex.Standards.Unihan17MainlandTelegraphDecimalToken, as: Telegraph
{:ok, scalar} = Telegraph.decode_token("0001")
{:ok, token} = Telegraph.encode_scalar(scalar)

Taiwan telegraph offers separate readable and lossless-VPUA reverse policies. This distinction avoids a fictitious concatenated byte-stream encoding. It also preserves duplicate and normalization-sensitive property values.

Verification

The RED/GREEN suite verifies:

Run it locally:

ICONVEX_PATH=../iconvex mix test --warnings-as-errors
elixir tools/generate_surface_module.exs --check

The bench/ directory contains performance and scaling gates. BENCHMARKS.md describes them. TDD_LOG.md records the test chronology.

License and provenance

The original Iconvex code uses LGPL-2.1-or-later, matching GNU libiconv. Packaged upstream evidence retains its Unicode, BSD-3-Clause, MIT, or PSF terms. See NOTICE and the accompanying license files.

Complete codec catalog

The generator builds this table from the release inventories. Do not edit this section by hand. Codec names ignore ASCII letter case. You can use each alias to look up its codec. Aliases do not increase the canonical codec count.

248 canonical codecs · 396 aliases · 644 accepted names.

Registered codec names

Canonical codecAccepted aliasesStateful
ABICOMPBRAZIL-ABICOMP
CODE-PAGE-3848
CP3848
FREEDOS-CP3848
No
ANSI_X3.110-1983CSA_T500-1983
iso-ir-99
NAPLPS
No
APL-ISO-IR-68ISO-IR-68-APLNo
APL-ISO-IR-68-2004ISO-IR-68-APL-2004No
ASMO_449arabic7
iso-ir-89
ISO_9036
No
BRASCIIABNT
ABNT-BRASCII
BRA-SCII
BRAZIL-ABNT
BRAZIL-ABNT-3847
CODE-PAGE-3847
CP3847
NBR-9611
NBR-9611:1991
NBR-9614
NBR-9614:1986
No
BS_4730gb
iso-ir-4
ISO646-GB
uk
No
BS_viewdataiso-ir-47No
CSA_Z243.4-1985-1ca
csa7-1
iso-ir-121
ISO646-CA
No
CSA_Z243.4-1985-2csa7-2
iso-ir-122
ISO646-CA2
No
CSA_Z243.4-1985-griso-ir-123No
CSN_369103iso-ir-139No
DEC-MCSdecNo
DIN_66003de
iso-ir-21
ISO646-DE
No
dk-usNo
DS_2089dk
DS2089
ISO646-DK
No
EBCDIC-AT-DENo
EBCDIC-AT-DE-ANo
EBCDIC-CA-FRNo
EBCDIC-DK-NONo
EBCDIC-DK-NO-ANo
EBCDIC-ESNo
EBCDIC-ES-ANo
EBCDIC-ES-SNo
EBCDIC-FI-SENo
EBCDIC-FI-SE-ANo
EBCDIC-FRNo
EBCDIC-ITNo
EBCDIC-PTNo
EBCDIC-UKNo
EBCDIC-USNo
ECMA-1ECMA-1-6BIT
ECMA-1-PRIMARY
ECMA1
No
ECMA-cyrilliciso-ir-111No
ESiso-ir-17
ISO646-ES
No
ES2iso-ir-85
ISO646-ES2
No
Extended_UNIX_Code_Fixed_Width_for_JapanesecsEUCFixWidJapaneseNo
GOST_19768-74iso-ir-153
ST_SEV_358-88
No
greek-ccittiso-ir-150No
GREEK-ISOECMA-118-1987
ELOT-928
ELOT928
ELOT928-GREEK
ISO-IR-126-1987
No
greek7ELOT-927
ELOT927
iso-ir-88
No
greek7-oldiso-ir-18No
HANGUL-JOHAB-COMPONENTUNICODE-HANGUL-JOHABNo
HANGUL-UHANGULHANGUL
UHANGUL
UNICODE-HANGUL-UNIFIED
No
HANGUL-WANSUNG-COMPONENTUNICODE-HANGUL-WANSUNGNo
HEBREW-ISOHEBREW-ISO-KERMIT
ISO-8859-8-1988-HISTORICAL
ISO-IR-138-1988
No
HP-DeskTopcsHPDesktopNo
HP-LegalcsHPLegalNo
HP-Math8csHPMath8No
HP-Pi-fontcsHPPiFontNo
IBM038cp038
EBCDIC-INT
No
IBM274CP274
EBCDIC-BE
No
IBM275cp275
EBCDIC-BR
No
IBM281cp281
EBCDIC-JP-E
No
IBM290cp290
EBCDIC-JP-kana
No
IBM420cp420
ebcdic-cp-ar1
No
IBM851851
cp851
No
IBM868cp-ar
CP868
No
IBM891cp891No
IBM903cp903No
IBM904904
cp904
No
IBM918CP918
ebcdic-cp-ar2
No
IEC_P27-1iso-ir-143No
INISiso-ir-49No
INIS-8iso-ir-50No
INIS-cyrilliciso-ir-51No
INVARIANTISO-IR-170No
ISCII-91ISCII91Yes
ISO-10585:1996-GRAPHICNo
ISO-10646-J-1csUnicodeJapaneseNo
ISO-10646-UCS-BasiccsUnicodeASCIINo
ISO-10646-Unicode-Latin1csUnicodeLatin1
ISO-10646
No
ISO-8859-1-Windows-3.0-Latin-1csWindows30Latin1No
ISO-8859-1-Windows-3.1-Latin-1csWindows31Latin1No
ISO-8859-2-Windows-Latin-2csWindows31Latin2No
ISO-8859-9-Windows-Latin-5csWindows31Latin5No
ISO-IR-129CCITT-T101-III-SUPPL
ISOIR129
ISO_129
No
ISO-IR-137CCITT-T101-I-MOSAIC-1
ISOIR137
ISO_137
No
ISO-IR-164HEBREW-SUPPLEMENTARY-ISO-IR-164No
ISO-IR-167ARABIC-FRENCH-GERMAN-ISO-IR-167No
ISO-IR-169BLISSYMBOLICS
CSISO169BLISS
ISOIR169
ISO_169
No
ISO-IR-171CNS-11643-1992-PLANE-1
CNS11643-1
No
ISO-IR-172CNS-11643-1992-PLANE-2
CNS11643-2
No
ISO-IR-173CCITT-T101-III-MOSAIC
ISOIR173
ISO_173
No
ISO-IR-181IEC-1289-TECHNICAL-1
ISOIR181
ISO_181
No
ISO-IR-182WELSH-ISO-IR-182No
ISO-IR-183CNS-11643-1992-PLANE-3
CNS11643-3
No
ISO-IR-184CNS-11643-1992-PLANE-4
CNS11643-4
No
ISO-IR-185CNS-11643-1992-PLANE-5
CNS11643-5
No
ISO-IR-186CNS-11643-1992-PLANE-6
CNS11643-6
No
ISO-IR-187CNS-11643-1992-PLANE-7
CNS11643-7
No
ISO-IR-198LATIN-HEBREW-ISO-IR-198No
ISO-IR-200URALIC-SUPPLEMENTARY-CYRILLICNo
ISO-IR-201VOLGAIC-SUPPLEMENTARY-CYRILLICNo
ISO-IR-202CSISO202KOREAN
ISOIR202
ISO_202
No
ISO-IR-204LATIN-1-EURO-ISO-IR-204No
ISO-IR-205LATIN-4-EURO-ISO-IR-205No
ISO-IR-206LATIN-7-EURO-ISO-IR-206No
ISO-IR-207IRISH-GAELIC-ISO-IR-207No
ISO-IR-208OGHAM-ISO-IR-208No
ISO-IR-228JIS-X-0213-2000-PLANE-1No
ISO-IR-229JIS-X-0213-2000-PLANE-2
JIS-X-0213-2004-PLANE-2
No
ISO-IR-232TURKMEN-ISO-IR-232No
ISO-IR-233JIS-X-0213-2004-PLANE-1No
ISO-IR-234LATIN-HEBREW-ISO-IR-234No
ISO-IR-31GREEK-BIBLIOGRAPHIC-1976No
ISO-IR-38DIN-31624
DIN_31624
No
ISO-IR-39DIN-31625
ISO-6438
No
ISO-IR-42CSISO42JISC62261978
ISOIR42
ISO_42
JIS-C6226-1978
JISC6226-1978
JIS_C6226-1978
No
ISO-IR-53ISO-5426
ISO_5426:1980
No
ISO-IR-59CODAR-U
CODARU
No
ISO-IR-71CCITT-MOSAIC-2
ISOIR71
ISO_71
No
iso-ir-90No
ISO_10367-boxiso-ir-155No
ISO_2033-1983e13b
iso-ir-98
No
ISO_5427iso-ir-37No
ISO_5427:1981iso-ir-54No
ISO_5428:1980iso-ir-55No
ISO_646.basic:1983refNo
ISO_646.irv:1983irv
iso-ir-2
No
ISO_6937-2-25iso-ir-152No
ISO_6937-2-addiso-ir-142No
ISO_8859-suppiso-ir-154
latin1-2-5
No
ITiso-ir-15
ISO646-IT
No
JIS0201UNICODE-MAPPING-JIS0201No
JIS0212JIS-X-0212-ROW-CELL
UNICODE-MAPPING-JIS0212
No
JIS_C6220-1969-jpiso-ir-13
JIS_C6220-1969
katakana
x0201-7
No
JIS_C6229-1984-aiso-ir-91
jp-ocr-a
No
JIS_C6229-1984-biso-ir-92
ISO646-JP-OCR-B
jp-ocr-b
No
JIS_C6229-1984-b-addiso-ir-93
jp-ocr-b-add
No
JIS_C6229-1984-handiso-ir-94
jp-ocr-hand
No
JIS_C6229-1984-hand-addiso-ir-95
jp-ocr-hand-add
No
JIS_C6229-1984-kanaiso-ir-96No
JUS_I.B1.002iso-ir-141
ISO646-YU
js
yu
No
JUS_I.B1.003-maciso-ir-147
JUS-I.B1.004
JUS_I.B1.004
macedonian
No
JUS_I.B1.003-serbiso-ir-146
serbian
No
KERMIT-ELOT927-GREEKDEC-GREEK-7-UPPER
ELOT927-GREEK
No
KOI7-switchedcsKOI7switchedYes
KOI8-C-DRAFT-WINITZKI-00No
KOI8-FCP60270-NMSU-2008
KOI8-F-NMSU-2008
KOI8-UNIFIED
KOI8-UNIFIED-NMSU-2008
No
KPS-9566-2003KPS-9566
KPS9566
No
KPS-9566-97EUC-KP
EUC-KP-97
KPS9566-97
KPS956697
No
KSC5636ISO646-KRNo
KSX1001KS-X-1001-ROW-CELL
UNICODE-MAPPING-KSX1001
No
latin-greekiso-ir-19No
Latin-greek-1iso-ir-27No
latin-lapiso-ir-158
lap
No
LATIN6-ISOISO-8859-10-LATIN6-STANDARD
LATIN-6-ISO-STANDARD
No
LIETUVYBE-52A97895-LST-1564-2000-STRICT-BLANKSNo
LIETUVYBE-52A97895-LST-1590-2-2000-STRICT-BLANKSNo
LIETUVYBE-52A97895-LST-1590-4-2000-STRICT-BLANKSNo
Microsoft-PublishingcsMicrosoftPublishingNo
MNEMcsMnem
mnemonic+ascii+8200
Yes
MNEMONICcsMnemonic
mnemonic+ascii+38
Yes
MSZ_7795.3hu
HUNGARIAN
iso-ir-86
ISO646-HU
No
NATS-DANOiso-ir-9-1No
NATS-DANO-ADDiso-ir-9-2No
NATS-SEFIiso-ir-8-1No
NATS-SEFI-ADDiso-ir-8-2No
NC_NC00-10:81cuba
iso-ir-151
ISO646-CU
No
NF_Z_62-010fr
iso-ir-69
ISO646-FR
No
NF_Z_62-010_(1973)iso-ir-25
ISO646-FR1
No
NS_4551-1iso-ir-60
ISO646-NO
no
No
NS_4551-2iso-ir-61
ISO646-NO2
no2
No
OLD5601OLD-KSC5601-ROW-CELL
UNICODE-MAPPING-OLD5601
No
PASCII-CDAC-GIST-1.0-2002-LOSSLESS-VPUA-1No
PASCII-CDAC-GIST-1.0-2002-RAW-VPUA-1No
PASCII-CDAC-GIST-1.0-2002-SINDHI-UNICODE17-BEST-FITNo
PASCII-CDAC-GIST-1.0-2002-URDU-KASHMIRI-UNICODE17-BEST-FITNo
PC8-Danish-NorwegiancsPC8DanishNorwegianNo
PC8-TurkishcsPC8TurkishNo
PTiso-ir-16
ISO646-PT
No
PT2iso-ir-84
ISO646-PT2
No
PUNYCODEBOOTSTRING-PUNYCODE
RFC-3492
RFC3492
No
RFC1345:ANSI_X3.4-1968No
RFC1345:GB_1988-80No
RFC1345:GB_2312-80No
RFC1345:hp-roman8No
RFC1345:IBM037RFC1345:cp037
RFC1345:ebcdic-cp-ca
RFC1345:ebcdic-cp-nl
RFC1345:ebcdic-cp-us
RFC1345:ebcdic-cp-wt
No
RFC1345:IBM1026RFC1345:CP1026No
RFC1345:IBM273RFC1345:CP273No
RFC1345:IBM277RFC1345:EBCDIC-CP-DK
RFC1345:EBCDIC-CP-NO
No
RFC1345:IBM278RFC1345:CP278
RFC1345:ebcdic-cp-fi
RFC1345:ebcdic-cp-se
No
RFC1345:IBM280RFC1345:CP280
RFC1345:ebcdic-cp-it
No
RFC1345:IBM284RFC1345:CP284
RFC1345:ebcdic-cp-es
No
RFC1345:IBM285RFC1345:CP285
RFC1345:ebcdic-cp-gb
No
RFC1345:IBM297RFC1345:cp297
RFC1345:ebcdic-cp-fr
No
RFC1345:IBM424RFC1345:cp424
RFC1345:ebcdic-cp-he
No
RFC1345:IBM437RFC1345:437
RFC1345:cp437
No
RFC1345:IBM500RFC1345:CP500
RFC1345:ebcdic-cp-be
RFC1345:ebcdic-cp-ch
No
RFC1345:IBM850No
RFC1345:IBM852RFC1345:852
RFC1345:cp852
No
RFC1345:IBM855RFC1345:855
RFC1345:cp855
No
RFC1345:IBM857RFC1345:857
RFC1345:cp857
No
RFC1345:IBM860RFC1345:860
RFC1345:cp860
No
RFC1345:IBM861RFC1345:861
RFC1345:cp-is
RFC1345:cp861
No
RFC1345:IBM862No
RFC1345:IBM863RFC1345:863
RFC1345:cp863
No
RFC1345:IBM864RFC1345:cp864No
RFC1345:IBM865RFC1345:865
RFC1345:cp865
No
RFC1345:IBM869RFC1345:869
RFC1345:cp-gr
RFC1345:cp869
No
RFC1345:IBM870RFC1345:CP870
RFC1345:ebcdic-cp-roece
RFC1345:ebcdic-cp-yu
No
RFC1345:IBM871RFC1345:CP871
RFC1345:ebcdic-cp-is
No
RFC1345:IBM880RFC1345:cp880
RFC1345:EBCDIC-Cyrillic
No
RFC1345:IBM905RFC1345:CP905
RFC1345:ebcdic-cp-tr
No
RFC1345:ISO_8859-1:1987No
RFC1345:ISO_8859-2:1987No
RFC1345:ISO_8859-3:1988No
RFC1345:ISO_8859-4:1988No
RFC1345:ISO_8859-5:1988No
RFC1345:ISO_8859-6:1987No
RFC1345:ISO_8859-7:1987No
RFC1345:ISO_8859-8:1988No
RFC1345:ISO_8859-9:1989No
RFC1345:JIS_C6220-1969-roNo
RFC1345:JIS_C6226-1983No
RFC1345:JIS_X0201No
RFC1345:JIS_X0212-1990No
RFC1345:KS_C_5601-1987No
RFC1345:latin6No
RFC1345:macintoshNo
SEN_850200_BFI
iso-ir-10
ISO646-FI
ISO646-SE
se
No
SEN_850200_Ciso-ir-11
ISO646-SE2
se2
No
SHORT-KOIKOI-7
KOI-7-N2
KOI7
KOI7-N2
VKD
No
T.101-G2iso-ir-128No
T.61-7bitiso-ir-102No
T.61-8bitiso-ir-103
T.61
No
TAMILVU-TACE16-APPENDIX-D-2010-16BETACE16-APPENDIX-D-2010-BENo
TAMILVU-TACE16-APPENDIX-D-2010-16LETACE16-APPENDIX-D-2010-LENo
UNIHAN-17.0.0-KGB3-ROW-CELL-GLNo
us-dkNo
UTF-7-IMAPIMAP-MODIFIED-UTF-7
IMAP-UTF-7
MODIFIED-UTF-7
Yes
Ventura-InternationalcsVenturaInternationalNo
Ventura-MathcsVenturaMathNo
Ventura-UScsVenturaUSNo
videotex-suppliso-ir-70No
VIQRcsVIQR
VIQR-1.1
Yes
VSCII-2ISO-IR-180
TCVN-5712-2
TCVN-VN2
TCVN5712-2
TCVN5712-2:1993
VN2
VSCII
No
x-iscii-asiscii-asm
windows-57006
Yes
x-iscii-beiscii-bng
windows-57003
Yes
x-iscii-deiscii-dev
windows-57002
Yes
x-iscii-guiscii-guj
windows-57010
Yes
x-iscii-kaiscii-knd
windows-57008
Yes
x-iscii-maiscii-mlm
windows-57009
Yes
x-iscii-oriscii-ori
windows-57007
Yes
x-iscii-paiscii-gur
windows-57011
Yes
x-iscii-taiscii-tml
windows-57004
Yes
x-iscii-teiscii-tlg
windows-57005
Yes
X-USER-DEFINEDx_user_definedNo

Packed transport profiles

5 base codec profiles · 10 explicit packed names. These profiles change the bit transport only. They do not add registered Unicode mappings.

Base codecUnit bitsStandard orderExplicit packed names
ECMA-16MSBECMA-1-PACKED-MSB
ECMA-1-PACKED-LSB
ISO-10585:1996-GRAPHIC7MSBISO-10585:1996-GRAPHIC-PACKED-MSB
ISO-10585:1996-GRAPHIC-PACKED-LSB
KERMIT-ELOT927-GREEK7MSBKERMIT-ELOT927-GREEK-PACKED-MSB
KERMIT-ELOT927-GREEK-PACKED-LSB
SHORT-KOI7MSBSHORT-KOI-PACKED-MSB
SHORT-KOI-PACKED-LSB
greek77MSBgreek7-PACKED-MSB
greek7-PACKED-LSB