2014-11-26 5 views
6

cerco di analizzare una pagina "iso-8859-1" e salvare il mio DB con utf-8, questo è il mio codice:Convert iso-8859-1 a UTF-8 javascript

var buffer = iconv.encode(data, "iso-8859-1"); 
data = iconv.decode(buffer, 'utf8'); 

Non funziona. Tutti i simboli come å o ä convertiti in 01¿

Come posso salvare questi simboli?

+1

Sei sicuro di non essere già codificato e di conseguenza la codifica a doppia cifra? –

+0

se si codifica per codificare X, quindi è necessario decodificare da X. Non si può semplicemente fare 'iconv.decode (icon.encode (data," x ")," Y ")'. Se si desidera codificare in un formato universale, codificare su unicode e da quel punto del codice in base, non eseguire mai la conversione: i database possono memorizzare unicode, i formati di dati possono rappresentare unicode ei lettori di dati possono eseguire il rilevamento automatico di unicode. –

+1

Sembra che tu abbia impostato 'encode' e' decode'. – hon2a

risposta

15

È necessaria una libreria di terze parti per tale attività. Si utilizza iconv-lite quindi è necessario attenersi alla seguente procedura:

  1. file di input Open in modalità binaria, in modo da JavaScript non si assume UTF-8 né tenta di convertire alla sua codifica interna:

    var fs = require("fs"); 
    var input = fs.readFileSync(inputFilePath, {encoding: "binary"}); 
    
  2. Conversione da ISO-8859-1 a Buffer:

    var iconv = require('iconv-lite'); 
    var output = iconv.decode(input, "ISO-8859-1"); 
    
  3. Salva Buffer al file di output:

    fs.writeFileSync(outputFilePath, output); 
    

Se non siete sicuri di nomi di codifica, è possibile verificare se un determinato codifica è supportato con encodingExists():

> iconv.encodingExists("ISO-8859-1"); 
true 
+0

Non funziona. Il caso è che voglio risolvere i miei problemi di sottotitoli in quanto sono codificati in ISO-8859-1 e convertirli in UTF-8. Faccio manualmente la cosa cambiando l'Unicode del sottotitolo tramite Firefox 'view -> Text Encoding' e cambiandolo in' Arabic Windows' e sostituendo il testo fisso nel file dei sottotitoli e salvandolo come 'UTF-8'. Automatizzare la procedura tramite Node JS e la tua soluzione DID non funziona per me, –

+0

@FarzadYZ Questo è un caso d'uso molto specifico e in qualche modo confuso (arabo? In latino-1?) E non ho idea di quale codice hai scritto o di come i tuoi dati è. Questo snippet fa semplicemente la conversione richiesta nella domanda partendo dal presupposto che i dati di input siano correttamente codificati. (Anche se ora torno qui due anni dopo mi rendo conto che sto leggendo da un file mentre OP ha detto "pagina" senza ulteriore contesto.) –

0

E 'di lavoro per me:

var tempBuffer = new Buffer(response.body, 'iso-8859-1'); 
var iconv = new Iconv('ISO-8859-1', 'UTF-8'); 
var tempBuffer = iconv.convert(tempBuffer); 

modulo 'iconv' usato https://github.com/bnoordhuis/node-iconv