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 38 2B 2F 76 39 2B 2F 76 2B 2B 2F 76 2F 2B 2F 76 38 2D |
43 47 118 56 43 47 118 57 43 47 118 43 43 47 118 47 43 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 ?