我正在开发一个应用程序的一部分,负责将一些数据导出到CSV文件中.该应用程序始终使用UTF-8,因为它在各个层面都具有多语言特性.但是在Excel中打开这样的CSV文件(包含例如变音符号,西里尔字母,希腊字母)并没有达到预期的结果?„/?¤, ?–/?¶.而且我不知道如何强制Excel理解打开的CSV文件是用UTF-8编码的.我也尝试过指定UTF-8 BOM EF BB BF,但Excel忽略了这一点.
有没有解决方法?
PS哪些工具可能像Excel一样?
UPDATE
我不得不说,我把社区与问题的表述混为一谈.当我提出这个问题的时候,我想要一种在Excel中打开UTF-8 CSV文件的方法,而不会给用户带来任何问题,而且流畅透明.但是,我使用了错误的配方要求自动执行此操作.这非常令人困惑,它与VBA宏自动化发生冲突.这个问题有两个我最欣赏的答案:Alex /sf/answers/420163691/的第一个答案,我接受了这个答案; 第二个是由Mark /sf/answers/454164931/稍后出现的.从可用性的角度来看,Excel似乎缺乏良好的用户友好型UTF-8 CSV支持,因此我认为这两个答案都是正确的,我首先接受了Alex的答案,因为它确实表明Excel无法做到这是透明的.这就是我在这里自动混淆的.Mark的答案为更高级的用户提供了一种更复杂的方式来实现预期的结果.这两个答案都很棒,但亚历克斯的答案更符合我未明确指出的问题.
更新2
五个月后,在最后一次编辑之后,我注意到Alex的答案因某种原因消失了.我真的希望这不是一个技术问题,我希望现在不再讨论哪个答案更大.所以我接受马克的答案是最好的答案.
我在C#中的asp.net mvc 2应用程序中遇到UTF8编码问题.我正在尝试让用户从字符串下载一个简单的文本文件.我试图用以下行获取字节数组:
var x = Encoding.UTF8.GetBytes(csvString);
但当我使用以下命令返回下载时:
return File(x, ..., ...);
我得到一个没有BOM的文件,所以我没有正确显示克罗地亚字符.这是因为我的bytes数组在编码后不包含BOM.我手动插入这些字节然后它正确显示,但这不是最好的方法.
我还尝试创建UTF8Encoding类实例并将布尔值(true)传递给其构造函数以包含BOM,但它也不起作用.
有人有解决方案吗?谢谢!
我正在尝试使用DialogResult和保存文件StringBuilder.在制作文本后,我调用以下代码来保存文件:
if (dr == DialogResult.OK)
{
StreamWriter sw = new StreamWriter(saveFileDialog1.FileName);
sw.Write(sb.ToString());
sw.Close();
}
Run Code Online (Sandbox Code Playgroud)
我试图将第二个参数添加到StreamWriteras,Encoding.UTF8但由于第一个参数是a string而不是a Stream,因此它不会编译它.
如何将该字符串转换为流,以便能够将第二个参数作为编码传递?
这样做的原因,是在我的文字是什么地方我有µ,但是当文件被保存它显示像μ这样µ越来越screwd!
谢谢