Sonderzeichen in CSV-Exporter
-
Hallo,
ich möchte einige Strings als *.csv Datei speichern.
Den CSV exporter habe ich ohne Probleme erstellen können. Jedoch kommt in einem String "m³" vor. Dieses "hoch 3" wird, wenn ich die CSV Datei mit Excel aufmache dargestellt als: "m³". Wie kann ich dieses String so abspeichern, dass dieses "Â" nicht zu sehen ist? (Office Excel 2010)Hier teile des Codes (Visual-Basic) den ich verwende (Als Beispielcode zusammengestückelt)
Dim a_String as String = "m³" Dim Lines(0) As String Dim String_A As String = a_String Dim String_B As String = "m" Lines(0) = St6ring_A + ";" + String_B Dim fs As New System.IO.FileStream(FileName, IO.FileMode.OpenOrCreate) Dim sw As New System.IO.StreamWriter(fs) For i As Integer = 0 To Lines.Length - 1 sw.WriteLine(Lines(i)) Next sw.Close() fs.Close()
Hierbei ist "a_String" ein String aus einer anderen Quelle. Ich kann also nicht einfach "m3" reinschreiben oder sowas. (Ich weiß auch nicht, welche Zeichen sonst noch dort in den Texten vorkommen können, die nicht richtig dargestellt warden) "FileName" ist ein String mit dem Zielpfad. Ebenfalls aus einer anderen Quelle.
-
- Finde heraus, welche Zeichencodierung die "andere Quelle" verwendet
- Finde heraus, welche Zeichencodierung Excel 2010 erwartet
- Codiere deine Strings dementsprechend um
-
MFK schrieb:
- Finde heraus, welche Zeichencodierung die "andere Quelle" verwendet
- Finde heraus, welche Zeichencodierung Excel 2010 erwartet
- Codiere deine Strings dementsprechend umAlso die "Zeichenquelle" liefert die Strings in dem selben Format, als ob ich einfach
Dim a_String as String = "m³"
im Code schreibe. Was Excel erwartet ist mir leider nicht so klar.
-
StreamWriter
verwendet, wenn man kein Encoding angibt, UTF-8. Und schreibt von sich aus natürlich auch keinen BOM.Die meisten Windows Applikationen nehmen, wenn sie "einfach nur ein Textfile" bekommen, an, dass es die System-Codepage verwendet. Die in Westeuropa üblicherweise CP1252 ist. Und damit bei non-ASCII Zeichen überhaupt nicht kompatibel mit UTF-8.
=> Als UTF-8 geschrieben, als CP1252 interpretiert => kann nicht funktionieren.
Lösung 1: System Default Codepage für den StreamWriter verwenden (=normalerweise CP1252, bzw. was das System halt verwendet). Sollte für Zeichen funktionieren die in 8 bittigen Textfiles von Notepad korrekt angezeigt werden. Andere Zeichen werden vermutlich zu "?". Hab's aber nicht ausprobiert -- es könnte genau so sein dass ne Exception fliegt wenn man versucht nicht im Ziel-Encoding darstellbare Zeichen zu schreiben.
' Ja, die explizite Angabe von System.Text.Encoding.Default bewirkt hier NICHT das selbe wie wenn man das Argument einfach weglässt! ' Nicht sehr intuitiv, aber ist halt so. Dim sw As New System.IO.StreamWriter(fs, System.Text.Encoding.Default) ...
Lösung 2: Weiterhin UTF-8 verwenden aber BOM in das File schreiben. Funktioniert für alle Zeichen. Dafür werden u.U. manche Programme das File nicht mehr korrekt lesen können. Excel 2010 sollte das mMn. aber schon verstehen.
Dim sw As New System.IO.StreamWriter(fs) sw.Write(ChrW(&HFEFF)) ' BOM schreiben ' (Muss als allererstes ins File geschrieben werden, sonst bringt's nix) ...
Diese Variante funktioniert genau so wenn man UTF-16 bzw. ein anderes UTF-Encoding verwendet. Wobei fraglich ist ob es Windows-Programme gibt die z.B. mit UTF-32 etwas anfangen können