Sto cercando di leggere un file CSV con Python con il seguente codice:Reading UTF-8 con BOM utilizzando il modulo Python CSV provoca caratteri extra indesiderati
with open("example.txt") as f:
c = csv.reader(f)
for row in c:
print row
mio example.txt
ha solo il seguente contenuto:
Hello world!
Per i file ANSI codificati UTF-8 o, questo mi dà i risultati attesi:
> ["Hello world!"]
Ma se salvare il file come UTF-8 con BOM ottengo questo output:
> ["\xef\xbb\xbfHello world!"]
Dal momento che non ho alcun controllo su ciò che i file che l'utente utilizzerà come input, vorrei che questo lavorare con BOM anche. Come posso risolvere questo problema? C'è qualcosa che devo fare per assicurarmi che funzioni anche per altre codifiche?
NB: qualunque sia la soluzione che si utilizza, l'importante è utilizzare 'utf-8-sig' per la decodifica. – ekhumoro
'importazione CSV, csvkit, codec, unicodecsv con aperta ("example.txt", 'r') come f: c = csv.reader (f) per la riga in c: stampa [unicode (s, "utf-8") per s nella riga] con aperto ("example.txt", 'r') come f: c = unicodecsv.reader (f) per riga c: riga di stampa con apri ("example.txt", "r") come f: c = csvkit.reader (f) per riga in c: riga di stampa 'tutte le stampe' [u '\ uffffCiao mondo!'] 'così mi piace non è ** duplicato ** - il primo tentativo utilizza http://stackoverflow.com/questions/17245415/read-and-write-csv-files-in cluding-unicode-with-python-2-7 – SIslam
@ekhumoro: Il duplicato è una linea di confine ... L'altra domanda riguarda i dati UTF-8 mentre questa è specificamente sulla BOM nel file utf8. L'altra pagina parla solo (in una sola risposta) di BOM per i file UTF-16. Il tuo commento risponde a questa domanda ma IMHO meriterebbe di essere una risposta a una domanda non duplicata :-) –