Necesito convertir el valor de mi entrada con el valor del juego de caracteres seleccionado. [![Para ver lo que quiero][1]][1] [1]: https://i.stack.imgur.com/vh07r.png Mi código:
const express = require('express'); const app = express(); const path = require('path'); var bodyParser = require('body-parser'); var iconv = require('iconv-lite'); var urlencodedParser = bodyParser.urlencoded({ extended: false }); app.get('/', function(req, res) { res.sendFile(path.join(__dirname, '/index.html')); }); app.post('/',urlencodedParser, function(req, res) { let input = req.body.input; let select = req.body.select; let utf8 = iconv.encode(input, 'utf-8'); let iso = iconv.encode(input, 'iso-8859-1'); let win = iconv.encode(input, 'win1252'); console.log(utf8.toString()); console.log(iso.toString()); console.log(win.toString()); res.sendFile(path.join(__dirname, '/index.html')); res.send(`Input string <textarea character-set=>${input}</textarea><br> ISO <textarea character-set="ISO-8859-1"></textarea><br> UTF-8 <textarea character-set="UTF-8"></textarea><br> Win-1252 <textarea character-set="windows-1252"></textarea><br> `); }); app.listen(3000);Presumiblemente, desea utilizar el contenido del archivo ubicado en path.join(__dirname, '/index.html') como una plantilla en la que puede inyectar el resultado de la transformación de codificación.
Si este es el caso, una solución simple sería:
const { format } = require('util'); const sourceFilepath = path.join(__dirname, '/index.html'); // Load the html source you wish to return as the result. // Note that if the file cannot be read, this will throw an // exception on server start. const content = fs.readSync(sourceFilepath); // The content of content should include a textarea tag in the // following format: // `<textarea character-set="%s">%s</textarea>';` // where the selected encoding will replace the first `%s` and // the resulting encoded input text will replace the second. // Helper to report errors back to the caller const reportError = (res, message) => { res.status(500).send(message); res.end(); }; // Helper to ensure we have a string to encode. const isNonEmptyString = (s) => (typeof s === 'string') && s.length; app.post('/', urlencodedParser, function(req, res) { // ensure we have something to encode // (trimming leading and trailing spaces.) const src = req.body.input.trim(); if (!isNonEmptyString(src)) { reportError(res, 'requires some input to encode'); return; } // set the required encoding, using utf-8 as a fall-back. const encoding = req.body.select || 'UTF-8'; // encode the src using the encoding // in the case of an encoding error, return a reasonable error message // to the caller. let result; try { result = iconv.encode(src, encoding); } catch (err) { reportError(`Error: failed to convert src using encoding "${encoding}": ${err}`); return; } // send back the result after replacing the printf `%s` markers with the // selected encoding and the transformed src . res.send(format(content, encoding, result)); res.end(); });Tenga en cuenta que esto es solo el comienzo de una solución completa, pero debería haber suficiente aquí para comenzar.
Hay muchas formas de realizar la transformación requerida y sería más eficiente transmitir el resultado a la persona que llama, pero esta es la solución más simple.
Dos notas de estilo:
var , let y const y es importante saber la razón por la que cada uno tiene su uso específico. Usar let solo tiene la posibilidad de inyectar errores difíciles de depurar en su código.try/catch y siempre maneje las excepciones detectadas de manera adecuada. Sin hacer esto, corre el riesgo de no devolver nada a la persona que llama, lo que también dificulta la depuración de su código.