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

XLSX/CSV转TXT工具特殊字符乱码(问号)问题求助

解决XLSX/CSV转TXT时特殊字符丢失的问题

问题原因

你的代码在处理俄语、日语等非ASCII字符时出现问号,核心原因是读取文件或转换过程中编码处理不当,导致Unicode字符被错误转码。

修改方案

主要调整两个关键环节:文件读取的编码配置,以及确保转换后的字符串以UTF-8格式写入。

  • 读取XLSX时指定UTF-8编码:在xlsx.readFile中添加codepage: 65001参数(65001对应UTF-8编码),强制以UTF-8解析文件内容,避免字符转码错误。
  • 明确写入文件的编码选项:将fs.writeFileSync的编码参数改为对象格式{ encoding: 'utf8' },确保写入时严格使用UTF-8编码,消除参数解析歧义。
  • 可选优化:直接使用sheet_to_txt替代sheet_to_csv,跳过CSV中间格式转换,减少编码出错概率(你原本也要移除逗号,纯文本转换更贴合需求)。

完整修改后的代码

const fs = require('fs');
const xlsx = require('xlsx');

const xlsxFilePath = process.argv[2];
const txtFilePath = process.argv[3];

// 读取文件时指定UTF-8编码
const workbook = xlsx.readFile(xlsxFilePath, { codepage: 65001 });
const firstSheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[firstSheetName];

// 直接转换为纯文本(替代CSV转换,更贴合需求)
const txtData = xlsx.utils.sheet_to_txt(worksheet);

// 移除仅含空白字符的行(原逻辑保留)
const txtDataWithoutEmptyLines = txtData.replace(/^\s*[\r\n]/gm, '');

// 明确指定UTF-8编码写入文件
fs.writeFileSync(txtFilePath, txtDataWithoutEmptyLines, { encoding: 'utf8' });

关键说明

  • codepage: 65001:告知xlsx库以UTF-8编码解析文件,确保非ASCII字符被正确读取。
  • sheet_to_txt:直接生成纯文本,无需处理CSV的逗号分隔符,减少不必要的转义操作。
  • { encoding: 'utf8' }:明确写入编码,避免Windows环境下Node.js默认编码(utf16le)导致的字符乱码。

内容的提问来源于stack exchange,提问作者Max Oliveira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:03:14