6

Estoy intentando convertir una cadena de CP932 (también conocida como Windows-31J) a utf8 en javascript. Básicamente, estoy rastreando un sitio que ignora la solicitud de utf-8 en el encabezado de solicitud y devuelve texto codificado en cp932 (aunque la metaetiqueta html indica que la página es shift_jis).Cómo convertir la codificación de caracteres de CP932 a UTF-8 en nodejs javascript, usando el módulo nodejs-iconv (u otra solución)

De todos modos, tengo toda la página almacenada en una variable de cadena llamada "html". A partir de ahí que estoy tratando de convertirlo en UTF8 utilizando este código:

var Iconv = require('iconv').Iconv; 
var conv = new Iconv('CP932', 'UTF-8//TRANSLIT//IGNORE'); 

var myBuffer = new Buffer(html.length * 3); 
myBuffer.write(html, 0, 'utf8') 
var utf8html = (conv.convert(myBuffer)).toString('utf8'); 

El resultado no es lo que se supone que debe ser. Por ejemplo, la cadena: "投稿 者 さ ん の 稚 内 全日空 ホ テ ル の ク チ コ ミ (感想 · 情報)" sale como "ソ ス ソ ス ソ ス e ソ ス メ ゑ ソ ス ソ ス ソ ス ソ ス ソ ス ソ ス t ソ ス ソ ス ソ ス S ソ ス ソ ス ソ ス ソ ス ソ ス z ソ ス e ソ ス ソ ス ソ ス フ ク ソ ス`ソ ス R ソ ス ~ (ソ ス ソ ス ソ ス z ソ ス e ソ ス ソ ス ソ ス ソ ス)"

Si quito // TRANSLIT // Ignorar (la cual debe hacer que vuelva caracteres similares para los caracteres que faltan, y en su defecto omitir no transcodificar-poder caracteres), Me aparece este error: Error: EILSEQ, secuencia de caracteres no válida.

Estoy abierto a usar cualquier solución que pueda implementarse en nodejs, pero mis resultados de búsqueda no han arrojado muchas opciones fuera del módulo nodejs-iconv.

nodejs-iconv ref: https://github.com/bnoordhuis/node-iconv

Gracias!

Editar 24.06.2011: He seguido adelante y he implementado una solución en Java. Sin embargo, todavía estaría interesado en una solución de JavaScript para este problema si alguien puede resolverlo.

+0

¿Ha confundido FROM y TO por casualidad? –

+0

La forma en que lo configuro coincide con los ejemplos en la documentación del módulo, pero solo por las patadas intenté cambiarlo, y el resultado parece peor. Obtengo esta cadena: "e tSze N'R ~ (zE)" – Brian

Respuesta

5

Tuve el mismo problema, pero con CP1250. Estaba buscando un problema en todas partes y todo estaba bien, excepto la llamada de solicitud. Tuve que agregar encoding: 'binary'.

request = require('request') 
Iconv = require('iconv').Iconv 

request({uri: url, encoding: 'binary'}, function(err, response, body) { 
    body = new Buffer(body, 'binary') 
    iconv = new Iconv('CP1250', 'UTF8') 
    body = iconv.convert(body).toString() 
    // ... 
}) 
Cuestiones relacionadas