Iconvex Platforms

iconvex_platforms adds 117 pure-Elixir, vendor- and platform-qualified codecs to Iconvex. The package contributes 354 unique registry names. This total includes 117 canonical names and 237 aliases.

The runtime uses no NIFs, ports, subprocesses, or calls to iconv. The OTP application registers the complete surface and tables in one transaction. Stopping it removes those routes and providers.

Installation

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

Conversion examples

IBM-1175 is the Turkish EBCDIC euro-and-lira revision:

iex> Iconvex.convert("TRY ₺€", "UTF-8", "IBM-1175")
{:ok, <<0xE3, 0xD9, 0xE8, 0x40, 0x9A, 0x9F>>}

GNU glibc's BRF map turns Braille ASCII cells into Unicode Braille:

iex> Iconvex.convert("AB", "BRF", "UTF-8")
{:ok, "⠁⠃"}

The package keeps the four VietUnicode VNI transports distinct. This example uses the 2002 ANSI Win/Unix profile.

iex> Iconvex.convert("Việt", "UTF-8", "VIETUNICODE-2002-VNI-ANSI-WIN-UNIX")
{:ok, <<0x56, 0x69, 0x65, 0xE4, 0x74>>}

Windows best-fit mappings use directional rules.

iex> Iconvex.convert("−", "UTF-8", "WINDOWS-BESTFIT-1252")
{:ok, "-"}
iex> Iconvex.convert("-", "WINDOWS-BESTFIT-1252", "UTF-8")
{:ok, "-"}

Java Modified UTF-8 rejects a literal zero byte and accepts the two-byte NUL:

iex> Iconvex.convert(<<0xC0, 0x80>>, "JAVA-MODIFIED-UTF-8", "UTF-8")
{:ok, <<0>>}

The stateful IBM-965 and IBM-17354 codecs emit designation and shift sequences, while UTF-8-MAC implements the HFS Plus decomposition profile:

iex> {:ok, encoded} = Iconvex.convert("A一", "UTF-8", "IBM-965")
iex> Iconvex.convert(encoded, "IBM-965", "UTF-8")
{:ok, "A一"}
iex> Iconvex.convert("é", "UTF-8", "UTF-8-MAC")
{:ok, "é"}

Package contents

FamilyCodecsExamples
glibc charmaps29TSCII, BRF, EUC-JP-MS, ISO_6937, KOI-8
Adobe and Apple legacy maps28Adobe Standard, MacJapanese, MacKeyboard
platform and specification profiles30IBM-1175, IBM-965, Java Modified UTF-8, UTF-8-MAC
Windows best-fit15874, 932, 936, 949, 950, 1250–1258, 1361
Evertype source-qualified7Mac Armenian, Ogham, Georgian, Turkic Cyrillic
VietUnicode VNI 20024DOS, ANSI, Mac, Internet Mail
secondary source-qualified3Wang WISCII, EKI Sami CP1270, Polytonic Greek
Unicode legacy1US-ASCII-QUOTES

Use Iconvex.Platforms.encodings/0 for the canonical list. Use Iconvex.Platforms.registrations/0 for aliases, modules, and source families. SURFACE_MANIFEST.tsv provides the immutable row-by-row contract.

Archive-independent IBM tables

Earlier code routed IBM-1175, IBM-965, and IBM-17354 through ICU Archive provider IDs. IBM-934/938 and IBM-5052/5053/5055/958 also used seven internal Archive tables. Platforms copies all ten immutable tables under package-owned IDs. It does not depend on iconvex_icu_archive or claim an Archive provider. Therefore, both optional packages can run without provider ownership collisions.

The package owns 84 tables. The total includes 73 manifest providers, ten relocated IBM dependencies, and the pinned glibc IBM423 table.

Verification

The test suite contains the original source fixtures and a 1,112,064-scalar UTF-32BE corpus. It verifies each row and canonical inverse in the generated mapping families. It checks all 94×94 positions for IBM-965 and IBM-17354. It checks every byte and inverse for each single-byte profile. Additional tests cover:

Representative source-bound benchmarks enforce a 30× native/reference ceiling and linear reduction scaling. See BENCHMARKS.md.

Extending Iconvex

Third-party packages can use Iconvex.Extension.register/2 for transactional registration. Platforms is a leaf package. Its only runtime dependency is Iconvex Core. Its runtime does not reference the former monolithic Specs namespace.

License and provenance

The original Iconvex code uses LGPL-2.1-or-later. Retained mapping and source artifacts keep their upstream terms. See NOTICE and the shipped 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.

117 canonical codecs · 237 aliases · 354 accepted names.

Registered codec names

Canonical codecAccepted aliasesStateful
ADOBE-STANDARD-ENCODINGAdobeStandardEncoding
csAdobeStandardEncoding
POSTSCRIPT-STANDARD-ENCODING
No
ADOBE-SYMBOL-ENCODINGAdobeSymbolEncodingNo
Amiga-1251Ami-1251
Ami1251
Amiga1251
csAmiga1251
No
BRFBraille-ASCII
Braille-Ready-Format
No
CP1090No
CP51950windows-51950No
CP770No
CP771No
CP772No
CP773No
CP774No
CWICP-HU
CWI-2
No
EBCDIC-IS-FRISSFRISSNo
EUC-JP-MSNo
EVERTYPE-2001-LATIN-8-EXTENDEDNo
EVERTYPE-2001-MAC-ARMENIANNo
EVERTYPE-2001-MAC-BARENTS-CYRILLICNo
EVERTYPE-2001-MAC-MALTESE-ESPERANTONo
EVERTYPE-2001-MAC-OGHAMNo
EVERTYPE-2002-MAC-GEORGIANNo
EVERTYPE-2002-MAC-TURKIC-CYRILLICNo
GLIBC-IBM423GLIBC-CP423
GLIBC-EBCDIC-CP-GR
IBM423-GLIBC
No
HP-GREEK8No
HP-ROMAN9R9
ROMAN9
No
HP-THAI8THAI8No
HP-TURKISH8TURKISH8No
IBM-1116-850-P100-COMPOSITECP1116-850-P100-COMPOSITE
IBM-1116-P100-COMPOSITE
IBM1116-850-P100-COMPOSITE
No
IBM-1117-437-P100-COMPOSITECP1117-437-P100-COMPOSITE
IBM-1117-P100-COMPOSITE
IBM1117-437-P100-COMPOSITE
No
IBM-1175CCSID1175
CP1175
IBM1175
No
IBM-1200CCSID1200
CCSID1201
CCSID13488
CCSID13489
CCSID17584
CCSID17585
CCSID21680
CCSID21681
CCSID25776
CCSID25777
CCSID29872
CCSID29873
CCSID61955
CCSID61956
IBM-1201
IBM-13488
IBM-13489
IBM-17584
IBM-17585
IBM-21680
IBM-21681
IBM-25776
IBM-25777
IBM-29872
IBM-29873
IBM-61955
IBM-61956
IBM1200
IBM1201
IBM13488
IBM13489
IBM17584
IBM17585
IBM21680
IBM21681
IBM25776
IBM25777
IBM29872
IBM29873
IBM61955
IBM61956
No
IBM-17354CCSID17354
CP17354
IBM17354
Yes
IBM-310-293-P100-COMPOSITE-VPUACP310-293-P100-COMPOSITE-VPUA
IBM-310-293-P100-VPUA
IBM310-293-P100-COMPOSITE-VPUA
No
IBM-5052CCSID5052
CCSID956
CP5052
CP956
IBM-956
IBM5052
IBM956
Yes
IBM-5053CCSID5053
CCSID957
CP5053
CP957
IBM-957
IBM5053
IBM957
Yes
IBM-5055CCSID5055
CCSID959
CP5055
CP959
IBM-959
IBM5055
IBM959
Yes
IBM-907-CDRA-P100-VPUA-COMPOSITECP907-CDRA-P100-VPUA-COMPOSITE
IBM-907-P100-VPUA-COMPOSITE
IBM907-CDRA-P100-VPUA-COMPOSITE
No
IBM-934CCSID934
CP934
IBM934
No
IBM-938CCSID938
CP938
IBM938
No
IBM-958CCSID958
CP958
IBM958
Yes
IBM-965CCSID965
CP965
IBM965
Yes
IBM-TNZ-CP310-B1EAE3CCP310-TNZ-07D60F4
IBM-TNZ-CP310-07D60F4
TNZ-CP310-07D60F4
TNZ-CP310-B1EAE3C
No
IBM1004CP1004
OS2LATIN1
No
IBM256EBCDIC-INT1No
IBM866NAV866NAV
CP866NAV
No
ISIRI-3342No
ISO-2022-JP-EXTISO2022-JP-EXT
ISO2022_JP_EXT
PYTHON-ISO2022-JP-EXT
Yes
ISO-8859-9ENo
ISO-IR-197No
ISO-IR-209No
ISO_11548-1No
ISO_6937ISO-IR-156
ISO6937
ISO_6937:1992
No
JAVA-MODIFIED-UTF-8ANDROID-DEX-MUTF-8
DEX-MODIFIED-UTF-8
DEX-MUTF-8
JAVA-MUTF-8
MODIFIED-UTF-8
MUTF-8
No
KEYBCS2KAMENICKY
KAMENICKY-BROTHERS
KAMENICKY-ORIGINAL
KEYBCS2-ORIGINAL
No
KOI-8No
LICSLOTUS-INTERNATIONAL-CHARACTER-SETNo
MAC-ISNo
MAC-SAMINo
MAC-UKNo
MacCelticMac-Celtic
x-mac-celtic
No
MacChineseSimpMac-Simplified-Chinese
x-mac-chinesesimp
No
MacChineseTradMac-Traditional-Chinese
x-mac-chinesetrad
No
MacDevanagariMac-Devanagari
x-mac-devanagari
No
MacDingbatsMac-DingbatsNo
MacFarsiMac-Farsi
x-mac-farsi
No
MacGaelicMac-Gaelic
x-mac-gaelic
No
MacGujaratiMac-Gujarati
x-mac-gujarati
No
MacGurmukhiMac-Gurmukhi
x-mac-gurmukhi
No
MACINTOSH-LATINMAC-ICELAND-10079
MAC-LATIN-KERMIT
No
MacInuitMac-Inuit
x-mac-inuit
No
MacJapaneseMac-Japanese
x-mac-japanese
No
MacKeyboardMac-Keyboard
x-mac-keyboard
No
MacKoreanMac-Korean
x-mac-korean
No
MACOS_ESPERANTOMAC-ESPERANTO
MACESPERANTO
MACOS-ESPERANTO
No
MacRomanianMac-Romanian
x-mac-romanian
No
MacSymbolMac-Symbol
x-mac-symbol
No
MIKNo
MYSQL-KEYBCS2KEYBCS2-MYSQL
MYSQL-KEYBCS2-AD-A1
No
TSCIITSCII-1.7No
UNICODE-APPLE:MacArabicMac-ArabicNo
UNICODE-APPLE:MacCentralEuropeMac-Central-Europe
MacCentEuro
No
UNICODE-APPLE:MacCroatianMac-CroatianNo
UNICODE-APPLE:MacCyrillicMac-CyrillicNo
UNICODE-APPLE:MacGreekMac-GreekNo
UNICODE-APPLE:MacHebrewMac-HebrewNo
UNICODE-APPLE:MacIcelandMac-IcelandNo
UNICODE-APPLE:MacRomanMac-RomanNo
UNICODE-APPLE:MacThaiMac-ThaiNo
UNICODE-APPLE:MacTurkishMac-TurkishNo
US-ASCII-QUOTESASCII-TYPOGRAPHIC-QUOTESNo
UTF-8-MACUTF-8-HFS
UTF-8-HFS-PLUS
UTF8-HFS
UTF8-MAC
Yes
UTF-8-SIGPYTHON-UTF-8-SIG
UTF8-SIG
Yes
VIETUNICODE-2002-VNI-ANSI-WIN-UNIXENCODE-VN-0.06-X-VIET-VNINo
VIETUNICODE-2002-VNI-ASCII-DOSENCODE-VN-0.06-X-VIET-VNI-ASCIINo
VIETUNICODE-2002-VNI-INTERNET-MAILENCODE-VN-0.06-X-VIET-VNI-EMAILNo
VIETUNICODE-2002-VNI-MACENCODE-VN-0.06-X-VIET-VNI-MACNo
WANG-1983-WISCII-PDF-F4043449-WIKIPEDIA-REV1352856854No
WIKIPEDIA-REV1340817319-EKI-SAMI-WIN-CP1270No
WIKIPEDIA-REV1354794598-PARATYPE-WINDOWS-POLYTONIC-GREEKNo
WIN-SAMI-2WINDOWS-SAMI2
WS2
No
WINDOWS-BESTFIT-1250bestfit1250
Windows-Best-Fit-1250
No
WINDOWS-BESTFIT-1251bestfit1251
Windows-Best-Fit-1251
No
WINDOWS-BESTFIT-1252bestfit1252
Windows-Best-Fit-1252
No
WINDOWS-BESTFIT-1253bestfit1253
Windows-Best-Fit-1253
No
WINDOWS-BESTFIT-1254bestfit1254
Windows-Best-Fit-1254
No
WINDOWS-BESTFIT-1255bestfit1255
Windows-Best-Fit-1255
No
WINDOWS-BESTFIT-1256bestfit1256
Windows-Best-Fit-1256
No
WINDOWS-BESTFIT-1257bestfit1257
Windows-Best-Fit-1257
No
WINDOWS-BESTFIT-1258bestfit1258
Windows-Best-Fit-1258
No
WINDOWS-BESTFIT-1361bestfit1361
Windows-Best-Fit-1361
No
WINDOWS-BESTFIT-874bestfit874
Windows-Best-Fit-874
No
WINDOWS-BESTFIT-932bestfit932
Windows-Best-Fit-932
No
WINDOWS-BESTFIT-936bestfit936
Windows-Best-Fit-936
No
WINDOWS-BESTFIT-949bestfit949
Windows-Best-Fit-949
No
WINDOWS-BESTFIT-950bestfit950
Windows-Best-Fit-950
No
x-cp50227CP50227
windows-50227
No
x-EuropaCP29001
Europa
windows-29001
No
ZAPF-DINGBATS-ENCODINGAdobe-Zapf-Dingbats
Zapf-Dingbats
No