Quindi, ad esempio, quando leggo il carattere π (\u03C0
) da un file utilizzando l'API FileReader, mi viene restituito il carattere pi quando l'ho letto utilizzando FileReader.readAsText(blob)
che è previsto. Ma quando uso FileReader.readAsBinaryString(blob)
, ottengo invece il risultato \xcf\x80
, che non sembra avere alcuna correlazione visibile con il carattere pi. Cosa sta succedendo? (Questo probabilmente ha qualcosa a che fare con il modo in cui è codificato UTF-8/16 ...)Differenza tra readAsBinaryString e readAsText utilizzando FileReader
risposta
Vabbè, se questo è tutto il necessario ... :)
CF80
è la codifica UTF-8 per π.
FileReader.readAsText
prende la codifica del file in considerazione. In particolare, poiché il file è codificato in UTF-8, potrebbero esserci più byte per carattere. Leggendolo come testo, l'UTF-8 viene letto così com'è e ottieni la tua stringa.
FileReader.readAsBinaryString
, d'altra parte, fa esattamente quello che dice. Legge il file byte per byte. Non riconosce i caratteri multi-byte, che in particolare sono una buona notizia per i file binari (in pratica qualsiasi cosa eccetto un file di testo). Poiché π è un carattere a due byte, si ottengono i due singoli byte che compongono la stringa.
Questa differenza può essere vista in molti posti. In particolare quando la codifica viene persa e vengono visualizzati caratteri come é visualizzati come à ©.
'CF80' è la codifica UTF-8 per π. – deceze
... oh, hai ragione ... grazie! – gengkev
... probabilmente era troppo ovvio, ma puoi postarlo come risposta, se vuoi. – gengkev