c#, Excel + csv): wie man die richtige Kodierung?
Ich habe versucht, dies für eine Weile jetzt, aber es kann nicht herausfinden. Ich versuche den export der Daten in Excel über ein *.csv-Datei. Es funktioniert soweit Super, aber ich habe einige encoding-Probleme beim öffnen der Dateien in Excel.
(ursprüngliche Zeichenfolge auf der linken Seite, EXCEL-Ergebnis auf der rechten Seite):
Messwert(µm / m) ==> Messwert(µm / m)
Dümme Mässöng ==> Dümme Mässöng
Notepad++ sagt mir, dass die Datei codiert ist "ANSI as UTF8"(WTF?)
So, hier sind verschiedene Möglichkeiten, die ich habe versucht, ein gültiges Ergebnis:
offensichtlich Umsetzung:
tWriter.Write(";Messwert(µm /m)");
mehr anspruchsvolle eine (versuchte wohl ein Dutzend oder mehr Codierung Kombinationen:)
tWriter.Write(Encoding.Default.GetString(Encoding.Unicode.GetBytes(";Messwert(µm /m)")));
tWriter.Write(Encoding.ASCII.GetString(Encoding.Unicode.GetBytes(";Messwert(µm /m)")));
und so weiter
Gesamte Quellcode für die Methode der Erstellung der Daten:
MemoryStream tStream = new MemoryStream();
StreamWriter tWriter = new StreamWriter(tStream);
tWriter.Write("\uFEFF");
tWriter.WriteLine(string.Format("{0}", aMeasurement.Name));
tWriter.WriteLine(aMeasurement.Comment);
tWriter.WriteLine();
tWriter.WriteLine("Zeit in Minuten;Messwert(µm /m)");
TimeSpan tSpan;
foreach (IMeasuringPoint tPoint in aMeasurement)
{
tSpan = new TimeSpan(tPoint.Time - aMeasurement[0].Time);
tWriter.WriteLine(string.Format("{0};{1};", (int)tSpan.TotalMinutes, getMPString(tPoint)));
}
tWriter.Flush();
return tStream;
Generierten CSV-Datei:
Dümme Mössäng
Testmessung die erste
Zeit in Minuten;Messwert(µm / m)
0;-703;
0;-381;
1;1039;
1;1045;
2;1457;
2;1045;
InformationsquelleAutor yas4891 | 2010-07-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Lösung geschrieben wird, als eine Korrektur für eine Java-Anwendung, aber Sie sollten in der Lage sein, etwas zu tun, ähnlich wie in C#. Möglicherweise möchten Sie auch ein Blick in die Dokumentation auf der StreamWriter Klasse, in der Bemerkungen, es bezieht sich auf das Byte Order Mark (BOM).
in Kombination mit den anderen "Antwort" - dieses Rätsel wurde für mich gelöst. Vielen Dank auch nochmal an Euch beide!
so fügen Sie eine Letzte Zeile: Stackoverflow ist gehen, um mir (noch mehr) lazzy, wenn Sie Jungs halten, dass Tempo!
InformationsquelleAutor Ken Henderson
Dies funktionierte perfekt für mich:
CSV-encoding-Fehler (Microsoft Excel)
InformationsquelleAutor Fernando JS
versuchen Sie Folgendes:
Schreibt er die korrekte UTF8-Präambel die Datei vor dem schreiben der UTF8 codierte CSV.
InformationsquelleAutor Trevor Germain
NotePad++ ist wohl richtig. Die Codierung ist UTF8 (D. H., die korrekte Unicode-header), enthält aber nur die ANSI-Daten (D. H., é ist nicht kodiert, im richtigen UTF8 Weg, was bedeuten würde, zwei bytes).
Oder: ist es die andere Weise herum. Es ist ANSI (keine Datei-header BOM), aber die Codierung der einzelnen Zeichen ist, oder aussieht, UTF8. Dies würde erklären, ü und andere Zeichen expandiert in mehr als einem anderen Charakter. Sie können dieses Problem beheben, indem Sie zwingt, die Datei zu Lesen als Unicode.
Wenn es möglich ist, zu posten (einen Teil) Ihrer CSV -, können wir in der Lage sein zu helfen, Befestigung an der Quelle.
Bearbeiten
Nun, wir haben gesehen, Ihr code ein: können Sie entfernen Sie die StreamWriter und ersetzen Sie es mit einem TextWriter? Auch, entfernen Sie die hand-Kodierung des BOM, ist es nicht notwendig. Wenn Sie erstellen einen TextWriter, können Sie die Kodierung angeben, die (nicht-ASCII verwenden, versuchen Sie, UTF8).
Ich habe eigentlich gehofft, Sie könnte es hochladen irgendwo, vorzugsweise als binäre (d.h. RV/rarred), weil durch kopieren hier ist der wichtige Teil, die byte-Reihenfolge und der Stückliste verloren gehen. Aber ich sehe jetzt, dass Sie die ganze Quelle, sorry, vergiss was ich sagte 😉
Kein problem-mate. Sie half mir schon eine ganze Menge, Sie sind also immer willkommen
InformationsquelleAutor Abel
Ich würde vorschlagen, öffnen Sie die text-Datei in einem hex-editor, und sehen, was es wirklich ist. Die BOM für UTF-16 ist 0xFEFF beginnt, die das schreiben von code ist anscheinend das schreiben in den stream - aber der rest des Schreibens nicht anzugeben, eine Codierung zu verwenden - es würde verwenden Sie die Standard-Kodierung der StreamWriter, der UTF-8. Es scheint sich um eine Mischung von Codierungen.
Wenn Sie pop öffnen Sie die Datei in hex-Ansicht, wenn Sie sehen, viele 0x00 zwischen den Charakteren, Sie arbeiten mit UTF-16 kodiert.Unicode in C#. Wenn es keine 0x00 zwischen chars, die Codierung ist wohl UTF-8.
Wenn letzteres der Fall ist, einfach nur fix die Stückliste zu
EF BB BF
eher alsFE FF
und Lesen in der Regel mit UTF-8-Codierung.InformationsquelleAutor Mark H
Trevor Germain geholfen, mich zu retten in das richtige format codiert
InformationsquelleAutor jAntoni
Für mein Szenario mit StreamWriter ich fand explizit übergeben UTF8-Codierung an den StreamWriter-aktiviert excel die Datei zu Lesen, mithilfe der richtigen Codierung.
Finden Sie hier für mehr details:
https://stackoverflow.com/a/22306937/999048
InformationsquelleAutor michael_hook