Iconvex Extras
iconvex_extras is the GNU libiconv 1.19 --enable-extra-encodings companion
for Iconvex.
It adds 86 codecs to Core's 112 GNU-default codecs.
The set contains 7 GNU extra, 9 AIX, 15 DOS, 2 OSF/1, and 53 z/OS encodings.
def deps do
[
{:iconvex, "~> 0.1.1"},
{:iconvex_extras, "~> 0.1.1"}
]
end
Start the application:
{:ok, "Café"} = Iconvex.convert(<<0x43, 0x61, 0x66, 0x82>>, "CP437", "UTF-8")
{:ok, "IBM-1047"} = Iconvex.canonical_name("CP1047")
{:ok, all} = Application.ensure_all_started(:iconvex_extras)
198 = length(Iconvex.encodings())
Stopping Extras returns the runtime to the 112 Core codecs. Restarting Extras restores all 198 codecs. Extras contributes 342 normalized GNU spelling keys. Core and Extras provide 758 GNU spellings in total.
One atomic extension
The application publishes 86 codec routes and the :euc_jisx0213 table provider.
It uses one Iconvex.Extension.register/2 transaction.
One opaque token owns the complete commit.
A conflict at any route rolls back all new routes and the provider. Shutdown removes only records that the token still owns. Stop, restart, and supervised registry-worker restart preserve the same ownership guarantees.
Extras uses managed priority 300. Therefore, GNU compatibility aliases outrank aliases from lower-priority source leaves. Core built-ins resolve first. Canonical claims outrank aliases at every package priority.
The package contains 85 mapping tables and the ISO-2022-JP-3 state machine.
Shared Core engines provide native linear paths for strict, discard, callback,
and substitution policies.
The runtime uses no NIF or operating-system iconv dependency.
Extras is one leaf in the final package split. The runtime packages expose 2,105 unique canonical codecs. The unpublished research workspace owns no runtime routes. Extras depends only on Iconvex Core.
Exact support and evidence
SUPPORTED_ENCODINGS.md contains the generated 86-codec list and each GNU origin. SUPPORTED_CODEC_INVENTORY.csv contains the machine-readable inventory. Its columns cover canonical names, aliases, modules, and statefulness.
The tests port all 85 applicable GNU mapping and inverse fixtures. They cover ISO-2022-JP-3 state, streaming, IBM-1047 policies, invalid-input recovery, aliases, and lifecycle behavior.
The sequential UCS-4BE corpus contains every code point from U+0000 through U+10FFFF. It contains 1,112,064 Unicode scalar values and all 2,048 surrogate code points.
EXHAUSTIVE_UNICODE_DIFFERENTIAL.md records the 198-codec comparison with GNU libiconv 1.19. It covers forward, reverse, and cross-decode directions. The final run has zero mismatches across all 1,114,112 code points.
A C11 in-memory GNU helper measures forward and reverse performance. The 30x limit applies to each direction. Both engines use one fixed iteration count. At each doubling, calibration uses the fastest of three probes. That probe must reach 10,000,000 ns. A delayed probe cannot end calibration early.
The report uses the fastest of three final batches. EUC-JISX0213 measures 2.95x forward and 15.38x reverse. CP943 measures 4.03x forward and 20.92x reverse. ISO-2022-CN has the highest ratio at 24.80x.
ICONVEX_PATH=../iconvex mix test --warnings-as-errors
ICONVEX_PATH=../iconvex mix compile --warnings-as-errors
ICONVEX_PATH=../iconvex MIX_ENV=prod mix run bench/benchmark.exs
GNU_ICONV=/path/to/gnu-libiconv-1.19/bin/iconv \
ICONVEX_PATH=../iconvex MIX_ENV=prod \
mix run tools/exhaustive_unicode_differential.exs
The C helper supports offline tests and benchmarks.
The runtime does not include it.
The Hex artifact contains runtime source, tables, licenses, inventories, and public evidence.
It excludes test/, bench/, tools/, PDFs, and large development corpora.
ICONVEX_PATH provides a development override for sibling checkouts.
Published builds use {:iconvex, "~> 0.1.1"} from Hex.
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.
86 canonical codecs · 256 aliases · 342 accepted names.
Registered codec names
| Canonical codec | Accepted aliases | Stateful |
|---|---|---|
ATARIST | ATARI | No |
BIG5-2003 | — | No |
CP1046 | IBM-1046 | No |
CP1124 | IBM-1124 | No |
CP1125 | IBM-1125 | No |
CP1129 | IBM-1129 | No |
CP1161 | CSIBM1161IBM-1161IBM1161 | No |
CP1162 | CSIBM1162IBM-1162IBM1162 | No |
CP1163 | CSIBM1163IBM-1163IBM1163 | No |
CP437 | 437CSPC8CODEPAGE437IBM-437IBM437 | No |
CP737 | — | No |
CP775 | CSPC775BALTICIBM775 | No |
CP852 | 852CSPCP852IBM-852IBM852 | No |
CP853 | — | No |
CP855 | 855CSIBM855IBM-855IBM855 | No |
CP856 | IBM-856 | No |
CP857 | 857CSIBM857IBM-857IBM857 | No |
CP858 | — | No |
CP860 | 860CSIBM860IBM-860IBM860 | No |
CP861 | 861CP-ISCSIBM861IBM-861IBM861 | No |
CP863 | 863CSIBM863IBM-863IBM863 | No |
CP864 | CSIBM864IBM-864IBM864 | No |
CP865 | 865CSIBM865IBM-865IBM865 | No |
CP869 | 869CP-GRCSIBM869IBM-869IBM869 | No |
CP922 | IBM-922 | No |
CP943 | IBM-943SJIS-1SJIS-2 | No |
DEC-HANYU | DECHANYU | No |
DEC-KANJI | DECKANJI | No |
EUC-JISX0213 | EUC-JIS-2004 | No |
IBM-037 | CP037CSIBM037EBCDIC-CP-CAEBCDIC-CP-NLEBCDIC-CP-USEBCDIC-CP-WTIBM037 | No |
IBM-1025 | CP1025IBM1025 | No |
IBM-1026 | CP1026CSIBM1026IBM1026 | No |
IBM-1047 | CP1047CSIBM1047IBM1047 | No |
IBM-1097 | CP1097IBM1097 | No |
IBM-1112 | CP1112IBM1112 | No |
IBM-1122 | CP1122IBM1122 | No |
IBM-1123 | CP1123IBM1123 | No |
IBM-1130 | CP1130IBM1130 | No |
IBM-1132 | CP1132IBM1132 | No |
IBM-1137 | CP1137IBM1137 | No |
IBM-1140 | CCSID01140CP01140CSIBM01140EBCDIC-US-37+EUROIBM01140IBM1140 | No |
IBM-1141 | CCSID01141CP01141CSIBM01141EBCDIC-DE-273+EUROIBM01141IBM1141 | No |
IBM-1142 | CCSID01142CP01142CSIBM01142EBCDIC-DK-277+EUROEBCDIC-NO-277+EUROIBM01142IBM1142 | No |
IBM-1143 | CCSID01143CP01143CSIBM01143EBCDIC-FI-278+EUROEBCDIC-SE-278+EUROIBM01143IBM1143 | No |
IBM-1144 | CCSID01144CP01144CSPC8CODEPAGE1144EBCDIC-IT-280+EUROIBM01144IBM1144 | No |
IBM-1145 | CCSID01145CP01145CSIBM01145EBCDIC-ES-284+EUROIBM01145IBM1145 | No |
IBM-1146 | CCSID01146CP01146CSPC8CODEPAGE1146EBCDIC-GB-285+EUROIBM01146IBM1146 | No |
IBM-1147 | CCSID01147CP01147CSIBM01147EBCDIC-FR-297+EUROIBM01147IBM1147 | No |
IBM-1148 | CCSID01148CP01148CSIBM01148EBCDIC-INTERNATIONAL-500+EUROIBM01148IBM1148 | No |
IBM-1149 | CCSID01149CP01149CSIBM01149EBCDIC-IS-871+EUROIBM01149IBM1149 | No |
IBM-1153 | CP1153IBM1153 | No |
IBM-1154 | CP1154IBM1154 | No |
IBM-1155 | CP1155IBM1155 | No |
IBM-1156 | CP1156IBM1156 | No |
IBM-1157 | CP1157IBM1157 | No |
IBM-1158 | CP1158IBM1158 | No |
IBM-1160 | CP1160IBM1160 | No |
IBM-1164 | CP1164IBM1164 | No |
IBM-1165 | IBM1165 | No |
IBM-1166 | CP1166IBM1166 | No |
IBM-12712 | CP12712IBM12712 | No |
IBM-16804 | CP16804IBM16804 | No |
IBM-273 | CP273CSIBM273IBM273 | No |
IBM-277 | CSIBM277EBCDIC-CP-DKEBCDIC-CP-NOIBM277 | No |
IBM-278 | CP278CSIBM278EBCDIC-CP-FIEBCDIC-CP-SEIBM278 | No |
IBM-280 | CP280CSIBM280EBCDIC-CP-ITIBM280 | No |
IBM-282 | IBM282 | No |
IBM-284 | CP284CSIBM284EBCDIC-CP-ESIBM284 | No |
IBM-285 | CP285CSIBM285EBCDIC-CP-GBIBM285 | No |
IBM-297 | CP297CSIBM297EBCDIC-CP-FRIBM297 | No |
IBM-423 | CP423CSIBM423EBCDIC-CP-GRIBM423 | No |
IBM-424 | CP424CSIBM424EBCDIC-CP-HEIBM424 | No |
IBM-425 | IBM425 | No |
IBM-4971 | CP4971IBM4971 | No |
IBM-500 | CP500CSIBM500EBCDIC-CP-BEEBCDIC-CP-CHIBM500 | No |
IBM-838 | CSIBMTHAIIBM-THAIIBM838 | No |
IBM-870 | CP870CSIBM870EBCDIC-CP-ROECEEBCDIC-CP-YUIBM870 | No |
IBM-871 | CP871CSIBM871EBCDIC-CP-ISIBM871 | No |
IBM-875 | CP875EBCDIC-GREEKIBM875 | No |
IBM-880 | CP880CSIBM880EBCDIC-CYRILLICIBM880 | No |
IBM-905 | CP905CSIBM905EBCDIC-CP-TRIBM905 | No |
IBM-924 | CCSID00924CP00924CSIBM00924EBCDIC-LATIN9-EUROIBM00924IBM924 | No |
ISO-2022-JP-3 | ISO-2022-JP-2004 | Yes |
RISCOS-LATIN1 | — | No |
SHIFT_JISX0213 | SHIFT_JIS-2004 | No |
TDS565 | ISO-IR-230 | No |