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

如何将CSV文件编码转换为ISO-8859-1(ISO-Latin-1)?

解决CSV转ISO-8859-1编码时特殊字符丢失的问题

核心问题根源

你之前用的text-encoding、PapaParse这类工具都是先把文件解析成Unicode文本,再转编码——但ISO-8859-1是单字节编码,像ä、ö、ü这类特殊字符在Unicode转ISO的过程中,若经过不必要的文本解析步骤,会被替换成乱码。正确的做法是跳过文本解析,直接操作原始字节流,确保字符的编码字节完全匹配ISO-8859-1标准。

可行解决方案

1. Node.js脚本(本地/后端)

用iconv-lite直接处理字节,避免Unicode转换损耗:

const fs = require('fs');
const iconv = require('iconv-lite');

// 读取UTF-8格式的CSV,转成ISO-8859-1字节后写入
const inputBytes = fs.readFileSync('input.csv');
const isoBytes = iconv.encode(inputBytes.toString('utf8'), 'iso-8859-1');
fs.writeFileSync('output_iso.csv', isoBytes);

如果原文件是其他编码(比如Windows-1252),把utf8换成对应编码即可。

2. 浏览器端处理

用FileReader读取文件的ArrayBuffer,直接生成ISO-8859-1编码的Blob下载:

function convertAndDownloadISO(file) {
  const reader = new FileReader();
  reader.onload = (e) => {
    const uint8Array = new Uint8Array(e.target.result);
    const isoBlob = new Blob([uint8Array], { type: 'text/csv; charset=ISO-8859-1' });
    
    const downloadLink = document.createElement('a');
    downloadLink.href = URL.createObjectURL(isoBlob);
    downloadLink.download = `${file.name.split('.')[0]}_iso.csv`;
    downloadLink.click();
  };
  reader.readAsArrayBuffer(file);
}

如果原文件是UTF-8,需引入iconv-lite的浏览器版本,先把UTF-8文本转成ISO字节再生成Blob。

3. 本地无编程工具

  • Python快速转换:
import codecs

with codecs.open('input.csv', 'r', 'utf-8') as infile:
    content = infile.read()
with codecs.open('output_iso.csv', 'w', 'iso-8859-1') as outfile:
    outfile.write(content)
  • Linux/macOS命令行:
iconv -f UTF-8 -t ISO-8859-1 input.csv > output_iso.csv
  • Windows PowerShell:
Get-Content input.csv -Encoding UTF8 | Set-Content output_iso.csv -Encoding Default

(Windows默认编码兼容ISO-8859-1,多数软件能正常读取)

关键提醒

ä、ö、ü这类字符本身属于ISO-8859-1的覆盖范围,只要避免中间的Unicode转换步骤,就能完美保留原有字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:25:48