Facendo il parsing di un file CSV in python ci si potrebbe accorgere che all’inizio del file rimangono dei “segni strani”, nel mio caso  (ma ciò dipende dalla formattazione con cui si visualizza).
Si tratta del Byte Order Mark (BOM), una piccola sequenza di caratteri che serve ad indicare la codifica Unicode del file medesimo.
Aprendo il file con un editor esadecimale, come HexEdit per esempio, vedremmo qualcosa come questo:

Nello specifico questo è un file esportato da WooCommerce e come primi 3 byte i valori EF BB BF che rappresentano l’UTF8.
Di seguito l’elenco, scopiazzato da Wikipedia, delle codifiche possibili:
| Encoding | Representation (hexadecimal) | Representation (decimal) | Bytes as CP1252 characters |
|---|---|---|---|
| UTF-8 | EF BB BF |
239 187 191 |
 |
| UTF-16 (BE) | FE FF |
254 255 |
þÿ |
| UTF-16 (LE) | FF FE |
255 254 |
ÿþ |
| UTF-32 (BE) | 00 00 FE FF |
0 0 254 255 |
^@^@þÿ (^@ is the null character) |
| UTF-32 (LE) | FF FE 00 00 |
255 254 0 0 |
ÿþ^@^@ (^@ is the null character) |
| UTF-7 | 2B 2F 76 382B 2F 76 392B 2F 76 2B2B 2F 76 2F2B 2F 76 38 2D |
43 47 118 5643 47 118 5743 47 118 4343 47 118 4743 47 118 56 45 |
+/v8+/v9+/v++/v/+/v8- |
| UTF-1 | F7 64 4C |
247 100 76 |
÷dL |
| UTF-EBCDIC | DD 73 66 73 |
221 115 102 115 |
Ýsfs |
| SCSU | 0E FE FF |
14 254 255 |
^Nþÿ (^N is the “shift out” character) |
| BOCU-1 | FB EE 28 |
251 238 40 |
ûî( |
| GB-18030 | 84 31 95 33 |
132 49 149 51 |
„1•3 |
Per interpretare correttamente il contenuto del file è sufficiente decodificarlo nella codifica corretta, nel mio caso con:
|
1 |
.decode('UTF-8') |
si, ma dove l’hai scritto quel codice ?