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

如何将XLSX解析CSV得到的\x80等Windows-1252编码字符转为可读字符串

问题根源

你遇到的问题本质是编码解析错误:原始文件是Windows-1252编码,其中0x80字节对应欧元符号,但你用SheetJS解析时没有指定编码,库默认按UTF-8/Unicode规则解析,把0x80直接映射成了Unicode的控制字符U+0080。Chrome对这类错误编码做了兼容处理自动转义,Safari、Firefox和MongoDB都严格遵循Unicode标准,所以无法正常识别。

解决方案

方案1:解析阶段直接指定编码(推荐)

在调用XLSX.read方法时直接指定编码为cp1252(Windows-1252的标准别名),从根源避免后续转码问题,所有特殊字符会自动解析为正确的Unicode格式:

const workbook = XLSX.read(fileBinaryData, {
  type: 'binary',
  encoding: 'cp1252'
})

方案2:已解析字符串的通用转码

如果无法修改解析逻辑,可以用以下通用转换方法处理所有Windows-1252的特殊字符,无需逐个替换:

// Windows-1252 0x80-0x9F区间到Unicode的映射表
const cp1252SpecialMap = new Map([
  [0x80, 0x20AC], [0x82, 0x201A], [0x83, 0x0192], [0x84, 0x201E],
  [0x85, 0x2026], [0x86, 0x2020], [0x87, 0x2021], [0x88, 0x02C6],
  [0x89, 0x2030], [0x8A, 0x0160], [0x8B, 0x2039], [0x8C, 0x0152],
  [0x8E, 0x017D], [0x91, 0x2018], [0x92, 0x2019], [0x93, 0x201C],
  [0x94, 0x201D], [0x95, 0x2022], [0x96, 0x2013], [0x97, 0x2014],
  [0x98, 0x02DC], [0x99, 0x2122], [0x9A, 0x0161], [0x9B, 0x203A],
  [0x9C, 0x0153], [0x9E, 0x017E], [0x9F, 0x0178]
])

function convertCp1252ToUnicode(str) {
  return str.split('').map(char => {
    const code = char.charCodeAt(0)
    if (code >= 0x80 && code <= 0x9F && cp1252SpecialMap.has(code)) {
      return String.fromCodePoint(cp1252SpecialMap.get(code))
    }
    return char
  }).join('')
}

// 测试
const s = '\x80'
console.log(convertCp1252ToUnicode(s)) // 全浏览器输出 €,存入MongoDB可正常识别

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:36:04