Vegyes karakterkódolású fájlok biztonságos tömeges helyreállítása: miért készítettem ezt az eszközt
Bevezetés
Ezt az eszközt egy egyszerű okból készítettem. Minden alkalommal kézzel megoldani túl fárasztó volt.
Belső rendszerekből érkező CSV-k, Excelből készült CSV-k, valamint Linuxból, Windowsból vagy adatbázisból exportált konfigurációk. Ha az eredet változik, vele változik a kódolás, a soremelés és a BOM is.
- UTF-8-ra számítasz, de Shift_JIS érkezik
- LF-re számítasz, de CRLF jön
- Egyes rendszerek BOM-mal stabilak, mások BOM-mal hibáznak
Az ellenőrzés és konverzió szemre, rutinból nem skálázható. Ezért készítettem olyan eszközt, amely bármilyen forrást fogad, és a célnak megfelelő kimenetet ad.
A valódi probléma nem egyetlen sérült fájl
Ha egy fájl sérül, általában menthető. A nehézség akkor jön, amikor egyszerre 10 vagy 100 fájl érkezik, eltérő forrásokból.
Ráadásul minden célrendszer mást tekint „helyesnek”.
- A rendszer csak UTF-8-at fogad BOM nélkül
- B rendszer UTF-8 + BOM mellett stabil
- C rendszer Shift_JIS-re épül; UTF-8 olvasható, de importnál elhasal
Ilyenkor a „mindent UTF-8-ra” tanács nem segít. Biztonságos, ismételhető, célhoz igazított folyamat kell.
Mit akartam elérni ezzel az eszközzel
Három alapelv:
- Bármilyen forrás fogadása
- Konvertálás a célrendszer követelményei szerint
- Tömeges feldolgozásnál se nőjön az incidensek száma
Ez nem technikai mutatvány, hanem az üzemeltetési súrlódás csökkentése.
Az általam ténylegesen használt eljárás
1. Először a kimeneti specifikációt rögzítsd
Ne bemenetből indulj, hanem kimenetből. Rögzítsd ezt a három pontot:
- Kódolás (UTF-8 / Shift_JIS stb.)
- Soremelés (LF / CRLF)
- BOM (van / nincs)
Ha ez bizonytalan, az eredmény kezelőnként eltér.
2. Oszd kisebb csomagokra a feldolgozást
Ne futtasd az egészet egyszerre. Rendszer, időszak vagy fájltípus szerint bontsd, és kis batch-csel kezdj.
Miért: hiba esetén vissza lehet állni. A teljes mennyiségű one-shot csak siker esetén gyors.
3. Rögzített feltételekkel futtasd a batch konverziót
A konvertálóban célonként rögzítsd a beállításokat. Futás közben ne módosítsd őket. A lényeg az ismételhetőség.
4. Ne csak vizuális ellenőrzés alapján dönts
„Megnyílik, tehát jó” sok incidens kiindulópontja. Legalább ezeket ellenőrizd:
- Sorok száma megegyezik-e előtte/utána
- CSV/TSV oszlopszám nem borult-e fel
�(helyettesítő karakter) nem nőtt-e- Kulcsoszlopok (ID/kód) hossza és karaktertípusa megmaradt-e
Ha nem megy át, ne induljon import.
A BOM nem hitkérdés, hanem partnerkövetelmény
A BOM-ról szóló vita üzemeltetésben ritkán hasznos. Csak az számít, hogyan dolgozza fel a másik rendszer.
- Ha BOM-mal stabil, BOM-mal add ki
- Ha BOM-mal hibázik, BOM nélkül add ki
Ne az „elméletileg helyes”, hanem a „másik oldalt nem törő” formátum legyen az első. Ez a gyakorlati üzemeltetés.
Az eszköz értéke nem maga a konverzió
A valódi érték két pontban van:
- A döntés nem személyfüggő
- Csökken az ismételt ellenőrzések költsége
A kódolási incidensek nem vihetők abszolút nullára. De ugyanazok az incidensek újrajátszása megállítható. Ezért készült ez az eszköz: bármit fogad, és felhasználási célnak megfelelően ad vissza.
Összegzés
Ez az eszköz nem idealista elméletből született. Azért született, hogy megszüntesse a terepen újra és újra előjövő, fárasztó kódolás-állítgatást.
Különböző eredetű fájlok fogadása, kódolás/soremelés/BOM igazítása a célhoz, majd egységes kimenet. Ennek az egy folyamatnak az automatizálása is sokat könnyít az üzemeltetésen.
A mojibake kezelése nem akaraterő-próba. Reprodukálható eljárássá kell tenni, amelyet bárki ugyanazzal az eredménnyel végrehajt. Csak ekkor mondható, hogy a tömeges mentés biztonságos.