出于某种原因,当我打开一个CSV文件时,在Excel和Notepad中看起来完全没问题,在Microsoft Works中,有一些奇怪的字符出现在文件中的第一件事。首先,我的意思是它们出现在单元格A1中,在该单元格中出现的文本之前。
这是一个示例文件
Illustration carrier,Net death benefit,Issue date,Issue state,Policy type,Member lives,Policy date,Termination of coverage,Termination of coverage action required,Accumulated value,AV,SV,Illustrated Annual Level Premiums,LP to NDB ratio,Premium financed,Name of program,Primary insured age,Primary insured gender,Secondary insured age,Secondary insured gender,Current bid,Time left,Bid1,Bid2,Bid3,Bid4,Bid5,Bid6,Bid7,Bid8,Bid9,Bid10,Bid11,Bid12,Bid13,Bid14,Bid15,Bid16,Bid17,Bid18,Bid19,Bid20
srwer,$0.00,14/05/2012,us state 2,policy Type 1,member life 4,16/05/2012,-,,$0.00,-,-,,Not yet implemented,no,,0y 0m,Demale,,Female,$0.00,"2 days, 7 hours, 51 minutes, 36 seconds".
我使用此方法在我的应用程序中创建这些文件
protected ActionResult ExportToCSV(string csvExport)
{
var output = new MemoryStream();
var writer = new StreamWriter(output, Encoding.UTF8);
writer.Write(csvExport);
writer.Flush();
output.Position = 0;
return File(output, "text/comma-seperated-values", "export.csv");
}
我有几个问题
答案 0 :(得分:1)
我怀疑它是UTF-8 byte order mark:

按照惯例,文件开头存在这些字符表示文件是使用UTF-8编码的。现代应用程序会查找这些字符并在存在时自动删除它们。但Microsoft Works是一个可能不支持UTF-8的旧应用程序。
要删除字符,可以在记事本中打开文件,选择文件>另存为,然后在“编码”下拉列表中选择ANSI。
更新:如果您需要支持旧的非Unicode应用程序(如Microsoft Works),则可以在.NET中创建文本文件时指定Encoding.ASCII
或Encoding.Default
。但MSDN Library提醒:
不同的计算机可以使用不同的编码作为默认编码,默认编码甚至可以在一台计算机上更改。因此,从一台计算机流式传输到另一台计算机或甚至在同一台计算机上不同时间检索的数据可能会被错误地翻译。此外,
Default
属性返回的编码使用最适合的回退将不受支持的字符映射到代码页支持的字符。出于这两个原因,通常不建议使用默认编码。为确保正确解码编码的字节,您的应用程序应使用Unicode编码(例如UTF8Encoding
或UnicodeEncoding
)和前导码。另一种选择是使用更高级别的协议来确保使用相同的格式进行编码和解码。
答案 1 :(得分:1)
csv可能是Unicode,这些是Unicode“魔术”字符,表示你是否有大端或小端?只是一个猜测。
答案 2 :(得分:1)
尝试以下方法:
StreamWriter writer= new StreamWriter(fullpath, false, Encoding.Unicode);