2012-09-16 9 views
10

Sono alle prese con il seguente problema. Usando javascript vorrei cambiare il set di caratteri di un contenuto di file e mostrare questo contenuto all'utente.Ottieni/imposta la codifica dei file con FileReader di javascript

Ho un input: forma di file. Sul cambiamento sto leggendo il contenuto

$('#form input:file').change(function(event){     
    file = this.files[0]; 
    reader = new FileReader(); 
    reader.onload = function(event) { 
     result = event.target.result.replace(/\n/g,'<br />'); 
     $('#filecontents').html(result); 
    }); 
    reader.readAsText(file); 
}) 

Il file è in Windows-1251. Vorrei convertire il contenuto del file in un'altra codifica e successivamente presentarlo all'utente.

È possibile ottenere questo risultato con javascript?

saluti

risposta

21

Se la pagina HTML è in UTF-8 e il file è in ISO-8859-1.

Questo è il lavoro:

reader.readAsText(file, 'ISO-8859-1'); 

non ho alcun file di Windows-1251 quindi non ero in grado di provarlo, ma sembra che sia sostenuto il 'CP1251' (da parte di Google Chrome, almeno), in modo da:

reader.readAsText(file, 'CP1251'); 

Se tutto questo non sta funzionando. Quindi dovresti cambiare la formattazione manualmente. Sfortunatamente, non sono a conoscenza di alcuna libreria JavaScript che faccia il trucco.

Dalla mappatura unicode here e da Delan Azabanianswer, si dovrebbe riuscire a costruire una funzione che converte char da char la stringa in CP1251 a UTF-8.

+0

Per quanto riguarda l'ultima frase, non esiste una funzione "standard" per convertire una stringa ISO-8859-1 in UTF-8? –

+0

Ho provato questo con un file Shift-JIS come segue: reader.readAsText (f, "Shift-JIS"); che convertito in UTF-8 va bene. Ma ora il problema è come rilevare che il file in entrata è codificato in Shift-JIS ... perché se provo a inviare un file con codifica UTF-8 in quella funzione, non sembra che converta correttamente. – starmandeluxe