You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js基于iconv-lite实现输入字符串按选中字符集转换问题

字符集转换功能代码调整方案

原代码存在以下核心问题:

  • 响应流程错误:调用res.sendFile后响应已经被终止,后续的res.send内容不会返回给前端
  • 转换后的数据没有绑定到返回的页面元素中,前端看不到转换结果
  • 直接对iconv.encode返回的Buffer调用toString()默认采用UTF-8解码,无法正确呈现对应字符集的编码结果

以下是修改后的完整可运行代码:

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const iconv = require('iconv-lite');

const urlencodedParser = bodyParser.urlencoded({ extended: false });

// 公共页面渲染函数,统一处理页面结构和结果填充
function renderPage(input = '', isoResult = '', utf8Result = '', winResult = '') {
  return `
  <!DOCTYPE html>
  <html>
  <head><meta charset="UTF-8"></head>
  <body>
    <form method="POST" action="/">
      <div>输入字符串:<input name="input" value="${input}" required></div>
      <button type="submit">转换</button>
    </form>
    <br>
    <div>输入字符串:<textarea rows="3" cols="50" readonly>${input}</textarea></div>
    <div>ISO-8859-1 编码结果(十六进制):<textarea rows="3" cols="50" readonly>${isoResult}</textarea></div>
    <div>UTF-8 编码结果(十六进制):<textarea rows="3" cols="50" readonly>${utf8Result}</textarea></div>
    <div>Windows-1252 编码结果(十六进制):<textarea rows="3" cols="50" readonly>${winResult}</textarea></div>
  </body>
  </html>
  `
}

app.get('/', function(req, res) {
  res.send(renderPage());
});

app.post('/', urlencodedParser, function(req, res) {
  const input = req.body.input || '';
  // 编码后转十六进制展示,避免乱码问题,也可以根据需求改为toString('base64')输出base64格式
  const utf8 = iconv.encode(input, 'utf-8').toString('hex');
  const iso = iconv.encode(input, 'iso-8859-1').toString('hex');
  const win = iconv.encode(input, 'win1252').toString('hex');

  // 直接返回带转换结果的页面,不要混用sendFile和send
  res.send(renderPage(input, iso, utf8, win));
});

app.listen(3000, () => {
  console.log('服务运行在 http://localhost:3000');
});

如果需要直接展示对应编码的可视字符而非十六进制,可以将toString('hex')替换为对应编码的解码逻辑,比如iconv.decode(iconv.encode(input, 'iso-8859-1'), 'iso-8859-1'),但要注意如果输入字符不在目标字符集的支持范围内会出现乱码。

内容的提问来源于stack exchange,提问作者Вадим Иващенко

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:09:04