none
VB.net - Bei CSV erstellen sind Sonderzeichen am Anfang der ersten Zeile RRS feed

  • Frage

  • Hallo,

    ich mal wieder.
    Ich erstelle eine CSV - Datei mit folgendem Programmiercode:

    Dim File As File = Nothing
    Dim Writer As New StreamWriter(Pfad, True, Text.Encoding.UTF8)
    
    .
    .
    .
    
    Writer.WriteLine(ÜberschriftCSV)
    
    .
    .
    .
    
    Writer.Close()

    In der Variable "ÜberschriftCSV" stehen mehrere Werte (ganz einfache Strings) umschlossen mit Anführungszeichen.
    Z.B. "Text1";"Text2"; ...

    Folgendes Problem. Die CSV Dateien enthalten Artikeldaten die von einem zusätzlichen Tool eines IT-Dienstleister eingelesen werden soll und dann in ein Onlineshop hochgeladen werden. Laut diesem IT-Dienstleister stehen aber am Anfang der ersten Zeile Sonderzeichen, die ich in meinem Editor (Windows-Editor und Notepad++) nicht sehe.

    Aber ich wüsste nicht was ich falsch programmiert habe, vor allem da bei mir in den Editoren ja alles passt.

    Oder kann dies evtl. durch den FTP Upload da hinzugekommen sein?

    Vielen Dank für Eure Hilfe!

    LG Marion

    Donnerstag, 6. Februar 2014 10:38

Antworten

  • UTF8Encoding-Konstruktor (Boolean) sollte das hin bekommen; siehe Parameter encoderShouldEmitUTF8Identifier: true, um anzugeben, dass eine Unicode-Bytereihenfolgemarkierung (=BOM Byte Order Marker) bereitgestellt wird, andernfalls false.

    Imports System.IO
    
    Module Module1
    
        Sub Main()
            Dim File As File = Nothing
    
            Dim Writer As StreamWriter
    
            Writer = New StreamWriter("C:\temp\utf8_Mit.txt", True, Text.Encoding.UTF8)
            Writer.WriteLine("Test UTF8 mit BOM")
            Writer.Close()
    
            Writer = New StreamWriter("C:\temp\utf8_Ohne.txt", True, New Text.UTF8Encoding(False))
            Writer.WriteLine("Test UTF8 ohne BOM")
            Writer.Close()
    
        End Sub
    
    End Module


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    • Als Antwort markiert Marion.M Donnerstag, 6. Februar 2014 14:17
    Donnerstag, 6. Februar 2014 11:32

Alle Antworten

  • Hallo Marion,

    da ich das Tool aus dem Screenshot nicht kenne, kann ich auch nur raten: Unter Windows wird bei UTF8 im Standard ein BOM = Hexwert FF + FE an anfang eingefügt, um zu kennzeichnen, das es eben ein UTF8 Datei ist. Ist also gut möglich, dass das Tool das nicht kennt/mag.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 6. Februar 2014 10:48
  • Hi, danke für die schnelle Antwort.

    Hab ich mir schon fast gedacht, dass das an dem Unterschied Windows <> MacOS liegt ;)
    Weißt du zufälligerweise ob man das irgendwie abfangen kann, also das dann kein BOM angefügt wird bzw. kann man das wieder entfernen?

    Das Problem ist, dass der Dienstleister die Datei in UTF-8 braucht, ich kann da also auch kein anderes Dateiformat nehmen =(

    Donnerstag, 6. Februar 2014 10:59
  • UTF8Encoding-Konstruktor (Boolean) sollte das hin bekommen; siehe Parameter encoderShouldEmitUTF8Identifier: true, um anzugeben, dass eine Unicode-Bytereihenfolgemarkierung (=BOM Byte Order Marker) bereitgestellt wird, andernfalls false.

    Imports System.IO
    
    Module Module1
    
        Sub Main()
            Dim File As File = Nothing
    
            Dim Writer As StreamWriter
    
            Writer = New StreamWriter("C:\temp\utf8_Mit.txt", True, Text.Encoding.UTF8)
            Writer.WriteLine("Test UTF8 mit BOM")
            Writer.Close()
    
            Writer = New StreamWriter("C:\temp\utf8_Ohne.txt", True, New Text.UTF8Encoding(False))
            Writer.WriteLine("Test UTF8 ohne BOM")
            Writer.Close()
    
        End Sub
    
    End Module


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    • Als Antwort markiert Marion.M Donnerstag, 6. Februar 2014 14:17
    Donnerstag, 6. Februar 2014 11:32
  • Danke für den Tipp.

    Hab das jetzt mal ausprobiert und die Datei an den Dienstleister geschickt. Mal schauen was zurück kommt ;)

    LG

    Marion

    Donnerstag, 6. Februar 2014 13:04
  • Jep, hat funktioniert!

    Vielen lieben Dank für die Hilfe.

    Donnerstag, 6. Februar 2014 14:17