Come rilevare la codifica di un file?

102

Sul mio filesystem (Windows 7) ho alcuni file di testo (questi sono file di script SQL, se questo è importante).

Se aperto con Notepad ++ , nel menu "Codifica" alcuni di questi hanno una codifica di "UCS- 2 Little Endian "e alcuni" UTF-8 senza BOM ".

Qual è la differenza qui? Sembrano tutti script perfettamente validi. Come potrei dire quali codifiche il file ha senza Notepad ++?

    
posta Marcel 15.02.2013 - 10:45
fonte

2 risposte

87

I file in genere indicano la loro codifica con un'intestazione di file. Esistono molti esempi qui . Tuttavia, anche leggendo l'intestazione non puoi mai essere sicuro di quale codifica si stia effettivamente utilizzando un file .

Ad esempio, un file con i primi tre byte 0xEF,0xBB,0xBF è probabilmente un file con codifica UTF-8. Tuttavia, potrebbe trattarsi di un file ISO-8859-1 che inizia con i caratteri  . Oppure potrebbe essere completamente un tipo di file diverso.

Notepad ++ fa del suo meglio per indovinare la codifica utilizzata da un file, e nella maggior parte dei casi riesce a farlo correttamente. A volte capita male, ecco perché il menu 'Encoding' è lì, quindi puoi ignorare la sua ipotesi migliore.

Per le due codifiche che hai citato:

  • I file "UCS-2 Little Endian" sono file UTF-16 (basati su ciò che ho capito dalle informazioni qui ) quindi probabilmente inizia con 0xFF,0xFE come i primi 2 byte. Da quello che posso dire, Notepad ++ li descrive come "UCS-2" dal momento che non supporta alcuni aspetti di UTF-16.
  • I file "UTF-8 senza BOM" non hanno byte di intestazione. Questo è ciò che significa il bit "senza BOM".
risposta data 15.02.2013 - 11:16
fonte
15

Non puoi. Se potessi farlo, non ci sarebbero tanti siti web o file di testo con "parole senza senso casuali". Ecco perché la codifica viene solitamente inviata insieme al payload come metadati.

Se non lo è, tutto ciò che puoi fare è una "congettura intelligente", ma il risultato è spesso ambiguo poiché la stessa sequenza di byte potrebbe essere valida in diverse codifiche.

    
risposta data 15.02.2013 - 11:16
fonte

Leggi altre domande sui tag