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
| Family | Codecs | Examples |
|---|---|---|
| glibc charmaps | 29 | TSCII, BRF, EUC-JP-MS, ISO_6937, KOI-8 |
| Adobe and Apple legacy maps | 28 | Adobe Standard, MacJapanese, MacKeyboard |
| platform and specification profiles | 30 | IBM-1175, IBM-965, Java Modified UTF-8, UTF-8-MAC |
| Windows best-fit | 15 | 874, 932, 936, 949, 950, 1250–1258, 1361 |
| Evertype source-qualified | 7 | Mac Armenian, Ogham, Georgian, Turkic Cyrillic |
| VietUnicode VNI 2002 | 4 | DOS, ANSI, Mac, Internet Mail |
| secondary source-qualified | 3 | Wang WISCII, EKI Sami CP1270, Polytonic Greek |
| Unicode legacy | 1 | US-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:
- Stateful behavior and conversion policies.
- UTF-8 offsets and lifecycle behavior.
- Artifact contents, digests, and licenses.
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 codec | Accepted aliases | Stateful |
|---|---|---|
ADOBE-STANDARD-ENCODING | AdobeStandardEncodingcsAdobeStandardEncodingPOSTSCRIPT-STANDARD-ENCODING | No |
ADOBE-SYMBOL-ENCODING | AdobeSymbolEncoding | No |
Amiga-1251 | Ami-1251Ami1251Amiga1251csAmiga1251 | No |
BRF | Braille-ASCIIBraille-Ready-Format | No |
CP1090 | — | No |
CP51950 | windows-51950 | No |
CP770 | — | No |
CP771 | — | No |
CP772 | — | No |
CP773 | — | No |
CP774 | — | No |
CWI | CP-HUCWI-2 | No |
EBCDIC-IS-FRISS | FRISS | No |
EUC-JP-MS | — | No |
EVERTYPE-2001-LATIN-8-EXTENDED | — | No |
EVERTYPE-2001-MAC-ARMENIAN | — | No |
EVERTYPE-2001-MAC-BARENTS-CYRILLIC | — | No |
EVERTYPE-2001-MAC-MALTESE-ESPERANTO | — | No |
EVERTYPE-2001-MAC-OGHAM | — | No |
EVERTYPE-2002-MAC-GEORGIAN | — | No |
EVERTYPE-2002-MAC-TURKIC-CYRILLIC | — | No |
GLIBC-IBM423 | GLIBC-CP423GLIBC-EBCDIC-CP-GRIBM423-GLIBC | No |
HP-GREEK8 | — | No |
HP-ROMAN9 | R9ROMAN9 | No |
HP-THAI8 | THAI8 | No |
HP-TURKISH8 | TURKISH8 | No |
IBM-1116-850-P100-COMPOSITE | CP1116-850-P100-COMPOSITEIBM-1116-P100-COMPOSITEIBM1116-850-P100-COMPOSITE | No |
IBM-1117-437-P100-COMPOSITE | CP1117-437-P100-COMPOSITEIBM-1117-P100-COMPOSITEIBM1117-437-P100-COMPOSITE | No |
IBM-1175 | CCSID1175CP1175IBM1175 | No |
IBM-1200 | CCSID1200CCSID1201CCSID13488CCSID13489CCSID17584CCSID17585CCSID21680CCSID21681CCSID25776CCSID25777CCSID29872CCSID29873CCSID61955CCSID61956IBM-1201IBM-13488IBM-13489IBM-17584IBM-17585IBM-21680IBM-21681IBM-25776IBM-25777IBM-29872IBM-29873IBM-61955IBM-61956IBM1200IBM1201IBM13488IBM13489IBM17584IBM17585IBM21680IBM21681IBM25776IBM25777IBM29872IBM29873IBM61955IBM61956 | No |
IBM-17354 | CCSID17354CP17354IBM17354 | Yes |
IBM-310-293-P100-COMPOSITE-VPUA | CP310-293-P100-COMPOSITE-VPUAIBM-310-293-P100-VPUAIBM310-293-P100-COMPOSITE-VPUA | No |
IBM-5052 | CCSID5052CCSID956CP5052CP956IBM-956IBM5052IBM956 | Yes |
IBM-5053 | CCSID5053CCSID957CP5053CP957IBM-957IBM5053IBM957 | Yes |
IBM-5055 | CCSID5055CCSID959CP5055CP959IBM-959IBM5055IBM959 | Yes |
IBM-907-CDRA-P100-VPUA-COMPOSITE | CP907-CDRA-P100-VPUA-COMPOSITEIBM-907-P100-VPUA-COMPOSITEIBM907-CDRA-P100-VPUA-COMPOSITE | No |
IBM-934 | CCSID934CP934IBM934 | No |
IBM-938 | CCSID938CP938IBM938 | No |
IBM-958 | CCSID958CP958IBM958 | Yes |
IBM-965 | CCSID965CP965IBM965 | Yes |
IBM-TNZ-CP310-B1EAE3C | CP310-TNZ-07D60F4IBM-TNZ-CP310-07D60F4TNZ-CP310-07D60F4TNZ-CP310-B1EAE3C | No |
IBM1004 | CP1004OS2LATIN1 | No |
IBM256 | EBCDIC-INT1 | No |
IBM866NAV | 866NAVCP866NAV | No |
ISIRI-3342 | — | No |
ISO-2022-JP-EXT | ISO2022-JP-EXTISO2022_JP_EXTPYTHON-ISO2022-JP-EXT | Yes |
ISO-8859-9E | — | No |
ISO-IR-197 | — | No |
ISO-IR-209 | — | No |
ISO_11548-1 | — | No |
ISO_6937 | ISO-IR-156ISO6937ISO_6937:1992 | No |
JAVA-MODIFIED-UTF-8 | ANDROID-DEX-MUTF-8DEX-MODIFIED-UTF-8DEX-MUTF-8JAVA-MUTF-8MODIFIED-UTF-8MUTF-8 | No |
KEYBCS2 | KAMENICKYKAMENICKY-BROTHERSKAMENICKY-ORIGINALKEYBCS2-ORIGINAL | No |
KOI-8 | — | No |
LICS | LOTUS-INTERNATIONAL-CHARACTER-SET | No |
MAC-IS | — | No |
MAC-SAMI | — | No |
MAC-UK | — | No |
MacCeltic | Mac-Celticx-mac-celtic | No |
MacChineseSimp | Mac-Simplified-Chinesex-mac-chinesesimp | No |
MacChineseTrad | Mac-Traditional-Chinesex-mac-chinesetrad | No |
MacDevanagari | Mac-Devanagarix-mac-devanagari | No |
MacDingbats | Mac-Dingbats | No |
MacFarsi | Mac-Farsix-mac-farsi | No |
MacGaelic | Mac-Gaelicx-mac-gaelic | No |
MacGujarati | Mac-Gujaratix-mac-gujarati | No |
MacGurmukhi | Mac-Gurmukhix-mac-gurmukhi | No |
MACINTOSH-LATIN | MAC-ICELAND-10079MAC-LATIN-KERMIT | No |
MacInuit | Mac-Inuitx-mac-inuit | No |
MacJapanese | Mac-Japanesex-mac-japanese | No |
MacKeyboard | Mac-Keyboardx-mac-keyboard | No |
MacKorean | Mac-Koreanx-mac-korean | No |
MACOS_ESPERANTO | MAC-ESPERANTOMACESPERANTOMACOS-ESPERANTO | No |
MacRomanian | Mac-Romanianx-mac-romanian | No |
MacSymbol | Mac-Symbolx-mac-symbol | No |
MIK | — | No |
MYSQL-KEYBCS2 | KEYBCS2-MYSQLMYSQL-KEYBCS2-AD-A1 | No |
TSCII | TSCII-1.7 | No |
UNICODE-APPLE:MacArabic | Mac-Arabic | No |
UNICODE-APPLE:MacCentralEurope | Mac-Central-EuropeMacCentEuro | No |
UNICODE-APPLE:MacCroatian | Mac-Croatian | No |
UNICODE-APPLE:MacCyrillic | Mac-Cyrillic | No |
UNICODE-APPLE:MacGreek | Mac-Greek | No |
UNICODE-APPLE:MacHebrew | Mac-Hebrew | No |
UNICODE-APPLE:MacIceland | Mac-Iceland | No |
UNICODE-APPLE:MacRoman | Mac-Roman | No |
UNICODE-APPLE:MacThai | Mac-Thai | No |
UNICODE-APPLE:MacTurkish | Mac-Turkish | No |
US-ASCII-QUOTES | ASCII-TYPOGRAPHIC-QUOTES | No |
UTF-8-MAC | UTF-8-HFSUTF-8-HFS-PLUSUTF8-HFSUTF8-MAC | Yes |
UTF-8-SIG | PYTHON-UTF-8-SIGUTF8-SIG | Yes |
VIETUNICODE-2002-VNI-ANSI-WIN-UNIX | ENCODE-VN-0.06-X-VIET-VNI | No |
VIETUNICODE-2002-VNI-ASCII-DOS | ENCODE-VN-0.06-X-VIET-VNI-ASCII | No |
VIETUNICODE-2002-VNI-INTERNET-MAIL | ENCODE-VN-0.06-X-VIET-VNI-EMAIL | No |
VIETUNICODE-2002-VNI-MAC | ENCODE-VN-0.06-X-VIET-VNI-MAC | No |
WANG-1983-WISCII-PDF-F4043449-WIKIPEDIA-REV1352856854 | — | No |
WIKIPEDIA-REV1340817319-EKI-SAMI-WIN-CP1270 | — | No |
WIKIPEDIA-REV1354794598-PARATYPE-WINDOWS-POLYTONIC-GREEK | — | No |
WIN-SAMI-2 | WINDOWS-SAMI2WS2 | No |
WINDOWS-BESTFIT-1250 | bestfit1250Windows-Best-Fit-1250 | No |
WINDOWS-BESTFIT-1251 | bestfit1251Windows-Best-Fit-1251 | No |
WINDOWS-BESTFIT-1252 | bestfit1252Windows-Best-Fit-1252 | No |
WINDOWS-BESTFIT-1253 | bestfit1253Windows-Best-Fit-1253 | No |
WINDOWS-BESTFIT-1254 | bestfit1254Windows-Best-Fit-1254 | No |
WINDOWS-BESTFIT-1255 | bestfit1255Windows-Best-Fit-1255 | No |
WINDOWS-BESTFIT-1256 | bestfit1256Windows-Best-Fit-1256 | No |
WINDOWS-BESTFIT-1257 | bestfit1257Windows-Best-Fit-1257 | No |
WINDOWS-BESTFIT-1258 | bestfit1258Windows-Best-Fit-1258 | No |
WINDOWS-BESTFIT-1361 | bestfit1361Windows-Best-Fit-1361 | No |
WINDOWS-BESTFIT-874 | bestfit874Windows-Best-Fit-874 | No |
WINDOWS-BESTFIT-932 | bestfit932Windows-Best-Fit-932 | No |
WINDOWS-BESTFIT-936 | bestfit936Windows-Best-Fit-936 | No |
WINDOWS-BESTFIT-949 | bestfit949Windows-Best-Fit-949 | No |
WINDOWS-BESTFIT-950 | bestfit950Windows-Best-Fit-950 | No |
x-cp50227 | CP50227windows-50227 | No |
x-Europa | CP29001Europawindows-29001 | No |
ZAPF-DINGBATS-ENCODING | Adobe-Zapf-DingbatsZapf-Dingbats | No |