首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止excel保存后更改csv文件编码?

如何防止excel保存后更改csv文件编码?
EN

Stack Overflow用户
提问于 2015-12-14 13:47:49
回答 1查看 4.4K关注 0票数 1

我正在尝试从.csv文件实现一个简单的数据导入到MVC应用程序。

为了消除用户将.csv文件模板保存在其计算机中的需要,并且从一开始就遇到了获取它的麻烦,我在表单上创建了一个生成模板的按钮。

我从编写器类中的模型对象生成一个字符串:

this.Writer.GetCswTemplate()从viewModel返回字符串(即列1;列2\r\n)

根据How to GetBytes() in C# with UTF8 encoding with BOM?

我强制excel使用UTF-8编码打开.csv文件:

代码语言:javascript
运行
复制
var templateResult = Encoding.UTF8.GetBytes(this.Writer.GetCswTemplate());
var preamble = Encoding.UTF8.GetPreamble();
var templateBytes = preamble.Concat(templateResult).ToArray();

要将生成的模板发送给用户,我使用MVC File()助手:

代码语言:javascript
运行
复制
return this.File(templateBytes, "application/csv", "filename.csv");

它工作得很好,它生成模板,将其返回给用户,用Excel打开它,并显示其中的所有特殊字符。如果我在Notepad++中打开生成的文件,我可以看到它的编码是UTF-8。

当用户填充生成的模板并将其保存到Excel中时,就会出现此问题。出于某种原因,Excel决定将文件编码更改为ANSI。

我有什么办法阻止这种事吗?我是不是遗漏了什么(添加某种标题或其他东西)?

有趣的是,如果我用UTF-8 (没有BOM)生成模板,在excel中修改该文件并保存它,Excel不会将其编码更改为ANSI。问题是Excel不识别模板中的特殊字符。

EN

回答 1

Stack Overflow用户

发布于 2015-12-14 14:02:35

UTF-8是一个可以包含任何Unicode字符的编码集。不幸的是,并不是所有的应用程序都可以在默认情况下对UTF-8中的文件进行编码,Microsoft Excel就是其中之一。

Excel用ANSI代替Unicode编码CSV文件

您要么需要要求用户在记事本中打开文件,然后以正确的格式保存(工作量很大!)或者制定一些检测/转换逻辑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34268635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档