Sto lavorando a uno strumento Python che deve essere in grado di aprire file di codifica UTF-8 e UTF-16. In Python 3.2, io uso il seguente codice per provare ad aprire il file utilizzando UTF-8, quindi provare con UTF-16 se c'è un errore di unicode:Come posso aprire file UTF-16 su Python 2.x?
def readGridFromPath(self, filepath):
try:
self.readGridFromFile(open(filepath,'r',encoding='utf-8'))
except UnicodeDecodeError:
self.readGridFromFile(open(filepath,'r',encoding='utf-16'))
(readGridFromFile
sarà o correre fino al suo completamento, o rilanciare . un UnicodeDecodeError
)
Tuttavia, quando si esegue questo codice in Python 2.x, ottengo:
TypeError: 'encoding' is an invalid keyword argument for this function
vedo nella documentazione che Python 2.x di open()
non ha un encoding
parola chiave. C'è un modo per aggirare questo che mi permetterà di rendere il mio codice Python 2.x compatibile?
Una buona chiamata, 'io.open' è l'opzione migliore. Tuttavia, gli svantaggi di 'codecs.open' non sono abbastanza significativi da definirlo" inadatto ", IMHO. –
A proposito, l'affermazione su 'codecs.open' che non gestisce correttamente la BOM è semplicemente sbagliata (l'ho provato). Il fatto non converte automaticamente le newline è vero (ma questa sembra essere l'unica differenza). –
L'ho provato di nuovo adesso - per UTF-16 BE/LE funziona abbastanza bene, ma per UTF8 il suo BOM (EB BB BF) è lasciato nel testo decodificato come u '\ ubeff'. Ricordo chiaramente che avevo problemi di decodifica con BOM usando '.decode()' su Windows, ma non posso testarlo ora. Ho corretto questa richiesta di equità. – toriningen