Trattare con UTF-8 numeri in Python
-
23-09-2019 - |
Domanda
Supponiamo Sto leggendo un file contenente 3 comma numeri separati. Il file è stato salvato con con una codifica sconosciuta, finora ho a che fare con ANSI e UTF-8. Se il file è stato in UTF-8 e aveva 1 riga con valori 115,113,12 poi:
with open(file) as f:
a,b,c=map(int,f.readline().split(','))
getterebbe questo:
invalid literal for int() with base 10: '\xef\xbb\xbf115'
Il primo numero è sempre storpiato con questi personaggi '\ XEF \ xbb \ XBF'. Per il resto 2 numeri la conversione funziona bene. Se io sostituire manualmente '\ XEF \ xbb \ XBF' con '' e poi fare la conversione int che funzionerà.
C'è un modo migliore di fare questo per qualsiasi tipo di file codificato?
Soluzione
import codecs
with codecs.open(file, "r", "utf-8-sig") as f:
a, b, c= map(int, f.readline().split(","))
Questo funziona in Python 2.6.4. La chiamata codecs.open
apre i dati del file e restituisce come unicode, decodifica da UTF-8 e ignorando la distinta iniziale.
Altri suggerimenti
quello che stai vedendo è una codifica UTF-8 BOM , o "Byte Order Mark". La distinta base non viene di solito utilizzato per UTF-8 file, quindi il modo migliore per gestire la cosa potrebbe essere quella di aprire il file con un codec UTF-8, e saltare sul carattere U+FEFF
se presente.