Domanda

Ho una raccolta di file codificati in ANSI o UTF-16LE. Vorrei che Python aprisse i file usando la codifica corretta. Il problema è che i file ANSI non generano alcun tipo di eccezione quando vengono codificati utilizzando UTF-16le e viceversa.

Esiste un modo semplice per aprire i file usando la codifica corretta?

È stato utile?

Soluzione

Utilizza la chardet per rilevare la codifica.

Altri suggerimenti

Puoi controllare BOM all'inizio di il file per verificare se è UTF.

Quindi unicode.decode di conseguenza (utilizzando uno dei < a href = "http://docs.python.org/library/codecs.html#standard-encodings" rel = "nofollow noreferrer"> codifiche standard ).

Modifica O, forse, prova s.decode ('ascii') la tua stringa (dato s è il nome della variabile). Se genera UnicodeDecodeError, decodificalo come 'utf_16_le'.

Cosa c'è nei file? Se è un testo semplice in un alfabeto a base latina, quasi ogni altro byte i file UTF-16LE saranno zero. Nei file windows-1252, d'altra parte, non mi aspetto di vedere alcun zero. Ad esempio, ecco & # 8220; Hello & # 8221; in windows-1252:

93 48 65 6C 6C 6F 94

... e in UTF-16LE:

1C 20 48 00 65 00 6C 00 6C 00 6F 00 1D 20

A parte le virgolette, ogni carattere viene mappato sullo stesso valore, con l'aggiunta di un byte zero finale. In effetti, questo è vero per ogni carattere nel set di caratteri ISO-8859-1 (windows-1252 estende ISO-8859-1 per aggiungere mappature per diversi caratteri di stampa & # 8212; come virgolette ricci & # 8212; per sostituire i caratteri di controllo nel intervallo 0x80..0x9F ).

Se sai che tutti i file sono windows-1252 o UTF-16LE, una scansione rapida per zero dovrebbe essere tutto ciò che ti serve per capire quale sia. C'è una buona ragione per cui Chardet è così lento e complesso, ma in questo caso penso che tu possa cavartela con veloce e sporco.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top