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

如何在C#和ASP.NET Core中将CSV文件编码为UTF-8格式

原有代码问题排查

你的两种实现都存在核心逻辑错误,所以没有生效:

  • 误用IFormFile.FileName:该属性是客户端上传的原始文件名,不是服务端本地存储的文件路径,直接用File类读写会找不到目标文件,IFormFile的内容需要通过OpenReadStream()方法获取流读取
  • 第一种方法仅读取了文件第一行就写回,直接丢失了剩余所有内容;且无参构造的StreamReader默认使用服务端系统编码读取文件,和文件原始编码不匹配,读取的内容本身就存在编码错误
  • 第二种方法将可写的输出流本身作为内容写入,没有写入任何实际的文件内容,操作后文件内容无效

原生.NET实现方案

不需要第三方库即可完成转码,步骤如下:

  1. 首先安装NuGet包System.Text.Encoding.CodePages,并在程序启动时注册编码提供器,支持识别各类非默认编码:
using System.Text;
// 程序启动时执行一次即可,比如Program.cs的开头
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
  1. 完整转码实现:
using System.Text;

// 1. 读取IFormFile的原始字节内容
byte[] originalFileBytes;
using (var originalStream = file.OpenReadStream())
{
    using (var ms = new MemoryStream())
    {
        originalStream.CopyTo(ms);
        originalFileBytes = ms.ToArray();
    }
}

// 2. 指定原始文件的编码,拉丁字符集常用编码为ISO-8859-1,可根据实际场景替换
Encoding originalEncoding = Encoding.GetEncoding("ISO-8859-1");
// 原始字节按对应编码解码为字符串
string fileContent = originalEncoding.GetString(originalFileBytes);
// 字符串编码为UTF8格式字节
byte[] utf8FileBytes = Encoding.UTF8.GetBytes(fileContent);

// 3. 写入到服务端目标路径,或直接返回流供后续操作
File.WriteAllBytes("你的目标保存路径.csv", utf8FileBytes);

如果需要生成带BOM的UTF8文件,将最后一步的编码替换为new UTF8Encoding(true)即可。


第三方库实现方案

处理CSV文件推荐使用.NET生态常用的CsvHelper库,可自动处理CSV转义、编码转换等场景:

  1. 安装NuGet包CsvHelper
  2. 实现代码:
using CsvHelper;
using System.Globalization;
using System.Text;

// 读取原始IFormFile内容
using var readStream = file.OpenReadStream();
// 替换为实际的原始文件编码
using var streamReader = new StreamReader(readStream, Encoding.GetEncoding("ISO-8859-1"));
using var csvReader = new CsvReader(streamReader, CultureInfo.InvariantCulture);

// 写入UTF8编码的CSV文件
using var writeStream = File.OpenWrite("目标保存路径.csv");
// UTF8Encoding构造参数为false表示不带BOM,设为true则带BOM
using var streamWriter = new StreamWriter(writeStream, new UTF8Encoding(false));
using var csvWriter = new CsvWriter(streamWriter, CultureInfo.InvariantCulture);

// 逐行读写保留所有CSV格式
while (csvReader.Read())
{
    csvWriter.WriteRecord(csvReader.Parser.Record);
    csvWriter.NextRecord();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:27:02