web-dev-qa-db-ja.com

C#で作成されたUTF-8 CSVファイルでExcelに文字が表示される

C#を使用してCSVファイルを生成し、Microsoft Excelで開くと、特殊記号の前にÂ文字が表示されます。 £

Notepad ++では、Âの16進値はC2です。

したがって、£記号をファイルに書き込む前に、次のことを試しました...

    var test = "£200.00";
    var replaced = test.Replace("\xC2", " ");

    StreamWriter outputFile = File.CreateText("testoutput.csv"); // default UTF-8
    outputFile.WriteLine(replaced);
    outputFile.Close(); 

ExcelでCSVファイルを開くと、£記号の前に「Â」文字がまだ表示されます(16進の\ xC2\xA3)。違いはありませんでした。

別のエンコーディングを使用する必要がありますか?または私は何かを逃していますか?

7
nimblebit

@Evkと@Mortalierに感謝します。あなたの提案が正しい方向に私を導きます...

最初にUTF-8 BOMを明示的に含めるようにStreamWriterを更新する必要がありました http://thinkinginsoftware.blogspot.co.uk/2017/12/correctly-generate-csv-that-Excel-can。 html

だから私のコードはから変更されました:

StreamWriter outputFile = File.CreateText("testoutput.csv"); // default UTF-8

に:

StreamWriter outputFile = new StreamWriter("testoutput.csv", false, new UTF8Encoding(true))

または:ここで私が見つけた別の解決策は、ラテン文字しか期待していない場合に別のエンコーディングを使用することでした... http://theoldsewingfactory.com/2010/12/05/saving-csv-files-in- utf8-creates-a-characters-in-Excel /

StreamWriter outputFile = new StreamWriter("testoutput.csv", false, Encoding.GetEncoding("Windows-1252"))

私のシステムではラテン文字と非ラテン文字を使用する可能性が高いため、UTF-8 BOMソリューションを使用しています。

最終コード

    var test = "£200.00";
    StreamWriter outputFile = new StreamWriter("testoutput.csv", false, new UTF8Encoding(true))
    outputFile.WriteLine(test);
    outputFile.Close();
9
nimblebit

私はあなたのコードを試しました、そしてExcelはセルにAŁを示します。次に、LibreOffice Clacでcsvを開こうとしました。最初はAŁもありましたが、インポート時にプログラムはエンコードについて尋ねます。 UTF-8を選択すると、£記号が正しく表示されました。私の推測では、実際にはエンコードに問題があります。

これはExcelに役立つかもしれません https://superuser.com/questions/280603/how-to-set-character-encoding-when-opening-Excel

3
Mortaliar