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

Node.js fs.readFile读取含土耳其字符XML文件乱码问题求助

解决Node.js读取含土耳其字符的XML文件乱码问题

问题分析

你的XML文件声明编码为iso-8859-9(土耳其语专用编码),但Windows环境下创建的文件实际存储编码可能是Windows-1254(与ISO-8859-9高度兼容但存在细微差异),直接用Node.js内置编码参数读取易出现不兼容导致的乱码。

解决方案

方案1:用XML解析库自动处理编码(推荐)

XML解析库会自动识别文件头部的编码声明,无需手动指定编码,能从根源避免编码匹配错误:

  1. 安装xmldom库:
npm install xmldom
  1. 使用以下代码读取解析:
const fs = require('fs');
const { DOMParser } = require('xmldom');

fs.readFile(uploadedDoc[0].path, (err, buffer) => {
  if (err) throw err;
  // 将Buffer转为二进制字符串,交由解析库自动处理编码
  const xmlContent = buffer.toString('binary');
  const parser = new DOMParser();
  const xmlDoc = parser.parseFromString(xmlContent, 'text/xml');
  
  // 示例:读取StreetName节点内容
  const streetName = xmlDoc.getElementsByTagName('cbc:StreetName')[0].textContent;
  console.log(streetName); // 输出正确的土耳其字符
});

方案2:用iconv-lite处理Windows土耳其编码

如果确认文件实际存储编码为Windows-1254,Node.js内置编码支持有限,需借助第三方库处理:

  1. 安装iconv-lite库:
npm install iconv-lite
  1. 解码文件内容:
const fs = require('fs');
const iconv = require('iconv-lite');

fs.readFile(uploadedDoc[0].path, (err, buffer) => {
  if (err) throw err;
  // 用Windows-1254解码Buffer
  const decodedContent = iconv.decode(buffer, 'windows-1254');
  console.log(decodedContent); // 乱码问题解决
});

额外检查步骤

用Notepad++打开XML文件,查看右下角显示的编码,确认文件实际存储的编码类型,确保解码时使用对应编码。

内容的提问来源于stack exchange,提问作者Ufuk Ugur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:52:39