Ako zistiť kódovanie súboru?

V mojom súborovom systéme (Windows 7) mám niekoľko textových súborov (ak na tom záleží, sú to súbory skriptov SQL).

Keď ich otvorím pomocou Notepad++, v ponuke "Encoding" sa pri niektorých z nich hlási kódovanie "UCS-2 Little Endian" a pri niektorých "UTF-8 bez BOM".

Aký je tu rozdiel? Zdá sa, že všetky sú úplne platné skripty. Ako by som mohol zistiť, aké kódovanie má súbor bez Poznámkového bloku++?

Riešenie

Súbory zvyčajne označujú svoje kódovanie pomocou hlavičky súboru. Existuje mnoho príkladov tu. Ani pri čítaní hlavičky si však nikdy nemôžete byť istí, aké kódovanie súbor skutočne používa**.

Napríklad súbor s prvými tromi bajtmi 0xEF,0xBB,0xBF je pravdepodobne súbor s kódovaním UTF-8. Môže to však byť súbor ISO-8859-1, ktorý náhodou začína znakmi . Alebo to môže byť úplne iný typ súboru.

Poznámkový blok++ sa snaží odhadnúť, aké kódovanie súbor používa, a väčšinou sa mu to podarí. Niekedy sa však mýli - preto je tu ponuka 'Kódovanie', aby ste mohli zrušiť jeho najlepší odhad.

Pre dve kódovania, ktoré ste spomenuli:

  • Súbory "UCS-2 Little Endian" sú súbory UTF-16 (podľa toho, čo som pochopil z informácií tu), takže pravdepodobne začínajú s 0xFF,0xFE ako prvé 2 bajty. Podľa toho, čo viem, Notepad++ ich opisuje ako "UCS-2", pretože nepodporuje určité aspekty UTF-16.
  • Súbory "UTF-8 bez BOM" nemajú žiadne bajty hlavičky. To znamená bit "bez BOM".
Komentáre (10)

Nemôžete. Keby ste to dokázali, nebolo by toľko webových stránok alebo textových súborov s "náhodnými blábolmi". Preto sa kódovanie zvyčajne posiela spolu s užitočným zaťažením ako metaúdaj.

V prípade, že nie je, jediné, čo môžete urobiť, je "inteligentný odhad", ale výsledok je často nejednoznačný, pretože tá istá postupnosť bajtov môže byť platná vo viacerých kódovaniach.

Komentáre (4)