如何解决Excel打开含中日俄字符的CSV文件时非英文字符乱码问题
问题原因
生成的CSV为无BOM头的UTF-8编码文件,Excel打开CSV时默认无法自动识别无BOM的UTF-8编码,会调用系统本地默认编码(如简体中文环境下为GBK)解析,中俄日等非ASCII字符就会显示乱码。文件本身存储的内容完全正确,乱码仅为Excel编码解析逻辑导致。
修复方案
方案1:写入文件时添加UTF-8 BOM头(推荐,用户打开无需额外操作)
在生成的CSV内容最开头拼接UTF-8 BOM标识\uFEFF,Excel识别到该标识后会自动以UTF-8编码解析文件,乱码问题直接解决。
修改后的代码示例:
const fs = require("fs") async function main() { let table = [ [ "en", "ch-zh", 'ru', 'ja' ], [ "Hello", "你好", "Привет", "こんにちは" ] ] let csvContent = array2csv(table) // 仅文件首次创建时添加BOM头,追加写入时不要重复添加 if (!fs.existsSync(__dirname +"/i18n.csv")) { csvContent = '\uFEFF' + csvContent } fs.writeFileSync(__dirname +"/i18n.csv", csvContent, { encoding: "utf8", flag: 'a', mode: 0o666 }) } main() function array2csv(arr){ arr = arr.map((col) => { return col.join(",") }) arr = arr.join("\n") return arr }
方案2:Excel导入时手动指定编码(无需修改生成逻辑)
如果不需要修改文件生成逻辑,可在Excel中手动导入文件指定编码:
- 打开Excel,切换到「数据」选项卡
- 选择「自文本/自CSV」,选中目标
i18n.csv文件 - 导入配置中编码选择
65001: Unicode (UTF-8),分隔符选择逗号,点击加载即可正常显示所有字符
异常显示效果

内容的提问来源于stack exchange,提问作者Yuu
相关产品推荐
相关产品推荐

