Introducere

Am construit acest instrument dintr-un motiv simplu. Să fac totul manual de fiecare dată devenise obositor.

CSV-uri din sisteme interne, fișiere convertite din Excel, configurații exportate din Linux, Windows sau baze de date. Când se schimbă sursa, se schimbă și codarea, terminatorii de linie și BOM-ul.

  • Crezi că e UTF-8, dar e Shift_JIS
  • Crezi că e LF, dar e CRLF
  • Unele sisteme cer BOM, altele se strică din cauza BOM

Verificarea și conversia „după ochi” nu scalează. De aceea am făcut un instrument care acceptă orice sursă și normalizează ieșirea după cerințele de import.


Problema reală nu este un singur fișier stricat

Dacă se strică un singur fișier, de obicei îl poți recupera. Greul apare când vin simultan 10 sau 100 de fișiere, din surse diferite.

Și mai dificil: fiecare sistem țintă are propria definiție a formatului „corect”.

  • Sistemul A acceptă doar UTF-8 fără BOM
  • Sistemul B e mai stabil cu UTF-8 cu BOM
  • Sistemul C pornește de la Shift_JIS; UTF-8 pare lizibil, dar importul eșuează

În acest context, sfatul „pune totul pe UTF-8” nu ajută. Ai nevoie de un proces sigur și repetabil, adaptat destinației.


Ce am vrut să obțin cu acest instrument

Doar trei principii:

  1. Acceptă fișiere din orice sursă
  2. Convertește după cerințele sistemului țintă
  3. Nu crește numărul de incidente la procesare în lot

Nu este o demonstrație tehnică, ci un instrument pentru a reduce fricțiunea operațională.


Procedura pe care o folosesc efectiv

1. Stabilește mai întâi specificația de ieșire

Nu porni de la input; fixează output-ul. Blochează aceste trei puncte:

  • Codare (UTF-8 / Shift_JIS etc.)
  • Terminator de linie (LF / CRLF)
  • BOM (cu / fără)

Dacă rămâne ambiguu, rezultatul se schimbă când se schimbă operatorul.

2. Împarte ținta în loturi mici

Nu procesa totul dintr-o dată. Împarte pe sistem, perioadă sau tip de fișier și începe cu loturi mici.

Motivul: în caz de eșec, poți face rollback. Un one-shot pe volum total e rapid doar când reușește.

3. Fixează condițiile și rulează conversia în lot

În instrumentul de conversie, fixează condiții stabile pe fiecare destinație. Nu modifica setările în timpul rulării. Cheia este repetabilitatea.

4. Nu valida succesul doar vizual

„Se deschide, deci e bine” e poarta spre incidente. Minim, verifică:

  • Numărul de rânduri înainte/după
  • Stabilitatea numărului de coloane CSV/TSV
  • Dacă (replacement character) nu crește
  • Dacă lungimea și tipul caracterelor din coloanele-cheie (ID/cod) rămân la fel

Dacă verificarea nu trece, nu continua cu importul.


BOM nu este ideologie, ci cerință a sistemului partener

Discuția „cu BOM / fără BOM” are puțină valoare în practică. Contează doar cum procesează fișierul sistemul de la capătul celălalt.

  • Dacă e stabil cu BOM, livrează cu BOM
  • Dacă se strică din BOM, livrează fără BOM

Prioritatea nu e „formatul teoretic corect”, ci „formatul care nu strică sistemul partener”. Așa arată operarea reală.


Valoarea instrumentului nu e conversia în sine

Valoarea reală are două componente:

  • Decizia nu mai depinde de persoană
  • Costul verificărilor repetate scade

Incidentele de codare nu pot fi reduse la zero absolut. Dar poți opri repetarea acelorași tipuri de incidente. De aceea am pregătit acest instrument: primește orice și returnează ieșirea aliniată scopului.


Concluzie

Acest instrument nu a fost creat din idealism. A fost creat pentru a elimina ajustările de codare repetitive și obositoare din teren.

Primește fișiere din surse diferite, aliniază codarea/terminatorii de linie/BOM la cerințele destinației și returnează ieșire consistentă. Doar automatizarea acestui flux simplifică mult operațiunile.

Gestionarea mojibake nu trebuie să depindă de voință. Trebuie transformată într-o procedură reproductibilă, astfel încât oricine să obțină același rezultat. Abia atunci putem vorbi despre salvare în masă în siguranță.