1

出于某种原因,当我打开一个在 Excel 和记事本中看起来完全正常的 CSV 文件时,在 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");
}

我有几个问题

  1. 有没有办法更改此代码以将文件保存为 ANSI 格式?
  2. 我能否在记事本、Works 和 Excel 中完美查看文件?
4

3 回答 3

2

我怀疑这是 UTF-8字节顺序标记



按照惯例,这些字符出现在文件的开头表明该文件是使用UTF-8编码的。现代应用程序会寻找这些字符并在它们存在时自动删除它们。但是 Microsoft Works 是一个可能不支持 UTF-8 的旧应用程序。

要删除字符,您可以在记事本中打开文件,选择文件 > 另存为,然后在编码下拉列表中选择ANSI 。

更新:如果您需要支持 Microsoft Works 等旧的非 Unicode 应用程序,那么您可以在 .NET 中创建文本文件时指定Encoding.ASCII或。Encoding.Default但 MSDN Library 警告:

不同的计算机可以使用不同的编码作为默认编码,甚至可以在单台计算机上更改默认编码。因此,从一台计算机流式传输到另一台计算机或什至在同一台计算机上的不同时间检索的数据可能会被错误地翻译。此外,该Default属性返回的编码使用最佳匹配回退将不受支持的字符映射到代码页支持的字符。由于这两个原因,一般不建议使用默认编码。为确保正确解码编码字节,您的应用程序应使用带有前导码的 Unicode 编码,例如UTF8Encodingor 。UnicodeEncoding另一种选择是使用更高级别的协议来确保编码和解码使用相同的格式。

于 2012-05-28T15:07:00.257 回答
1

可能 csv 是 Unicode,而这些是 Unicode“神奇”字符,表示您是大端还是小端?只是一个猜测。

于 2012-05-28T15:07:23.547 回答
1

尝试以下操作:

  StreamWriter writer= new StreamWriter(fullpath, false, Encoding.Unicode);
于 2014-01-29T10:37:25.587 回答