Textový soubor z UTF-8 na CP1250?

Tohle musím opravdu zapsat. Jednoho dne se Španěláci rozhodli, že mi budou posílat EDI zprávy do systému v Unicode. Že prý to tak rozesílají všem elektronicky připojeným pobočkám a ať si to zkonvertuji na co chci.

Dobrá, říkám si, jednoduchá věc. Vezmu přeci nějaký konvertor, který mi převede TXT soubor z Unicode na mojí vlastní českou ANSI Windows-1250. Konvertorů je fůra, ve zlatém věku rozmachu (cca 2000—2004) takových utilit vzniklo nepočítaně, každý začínající programátor musel umět takovou věc naprogramovat.
Po pár minutách jsem narazil na Voříškovu stránku s obřím testem takových programů. Hurá, je jich tam 109, to si přeci stačí vybrat a jdeme domu, ne?

Vybírám první, neumí Unicode. Dobrá, omezíme se jen na ty, kteří s Unicode umí handlovat. Osm. Ještě to omezíme na ty, které umí běhat v příkazové řádce. Čtyři. No potěš. Zkouším je postupně. Ani jeden nevyplivnul to, co jsem potřeboval. Nefungovaly. No prima.

Další fígl prý spočívá v tom, že se textový soubor prožene obyčejným příkazem v příkazovém řádku:
type souboruni.txt > souboransi.txt
Žádná sláva, výsledkem je přesná kopie a ne konverze, Američani žijící si ve svém blahobytu s čistým ASCII tomu asi opravdu náramně rozumí.

Tak co teď. Hledáním a zkoušením jsem strávil bezmála pět hodin, to už by mohlo stačit. Je na čase poohlédnout se po něčem funkčním a sprovodit tento IT oříšek ze světa. Prý existuje něco jako Linux, jsem kdysi četl. A občas jsou pro něj zajímavé knihovny portované pro Windows. A když jsem se probíral tou hromadou nefunkčního šrotu, občas na mě vykouklo slovíčko „iconv“. Povidám si — zase nějaká praštěná lokalizační služba, která mi stejně pod Windows nebude chodit, stejně jako všecko. Dokumentace se k tomu tváří úplně nelidsky nečitelně, to zase bude mejdan.

Stahuji tedy potřebné binárky a knihovny, které někdo moc hodný připravil. Snažím se to všecko sehnat ručně a nastrkat do jednoho adresáře, však dobře víme, jak ty GNU/Win32 instalace vypadají, nene, tady nejsme u pana Torvalda, kdepak. Konečně jsem dal dohromady potřebnou skupinku souborů: iconv.exe, libcharset1.dll, libiconv2.dlllibintl3.dll

Jak se to bude chovat? Že vono to na mě zase bude hulákat, že to nemůže zapsat do /tmp nebo jiný nesmysl? Zkusím ten trik tedy:

iconv -f UTF-8 -t CP1250 KON.TXT >KON2.TXT

A světe div se! Unicodový soubor KON.TXT skutečně přešel na víru pravou a neotřesitelnou KON2.TXT v kódové stránce Windows-1250. No a je to doma. Tak sláva.

PS: vše pěkně pohromadě najdete ke stažení na projektové stránce Libiconv for Windows na SourceForge.net