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ライブラリは次のように警告しています。

コンピュータが異なれば、デフォルトとして異なるエンコーディングを使用でき、デフォルトのエンコーディングは1台のコンピュータで変更することもできます。したがって、あるコンピューターから別のコンピューターにストリーミングされたデータ、または同じコンピューターで異なる時間に取得されたデータでさえ、誤って変換される可能性があります。さらに、Defaultプロパティによって返されるエンコーディングは、最適なフォールバックを使用して、サポートされていない文字をコードページでサポートされている文字にマップします。これらの2つの理由から、デフォルトのエンコーディングを使用することは一般的に推奨されていません。UTF8Encodingエンコードされたバイトが正しくデコードされるようにするには、アプリケーションで、またはなどのUnicodeエンコードをUnicodeEncodingプリアンブルとともに使用する必要があります。もう1つのオプションは、高レベルのプロトコルを使用して、エンコードとデコードに同じ形式が使用されるようにすることです。

于 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 に答える