none
StreamWriter encoding problem RRS feed

  • Frage

  • Guten Tag

    Ich plage mich seit einigen Stunden mit dem StreamWriter Encoding rum.

    Gerne hätte ich ein Encoding welches Umalute Akzeptiert. Jedoch bring ich es nicht fertig das Encoding so einzustellen.

    Mein Default Encoding:

    BodyName             : iso-8859-1
    EncodingName      : Western European (Windows)
    HeaderName        : Windows-1252

    --------------------------------------------

    Was ich gerne hätte:

    ANSI

    --------------------------------------------

    Hier Mein Code:

    $content = Get-Content -Path $SAPExportFileFilePath
    $file = New-Object System.IO.StreamWriter ($EditedSAPExportFileFilePath, [System.Text.Encoding]::Default)
    foreach($line in $content){
    		$line = $line.replace("text1","2text2")
    #		$line | Out-File -FilePath $EditedSAPExportFileFilePath -Append
    		
    		$file.Writeline($line) 
    	}
    $file.close()

    Hier habe ich mich bereits ein bisschen informiert:

    http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx

    http://msdn.microsoft.com/en-us/library/f5f5x7kt%28v=vs.80%29.aspx

    Vielen Dank


    [ Im swiss. I'm sorry for my bad english writing ]

    Dienstag, 5. Februar 2013 12:36

Antworten

  • Das geht bei mir mit utf-8 und Codepage 65001 !

    Codepages und Ihre Nummern siehe: 
    http://msdn.microsoft.com/de-de/library/86hf4sb8%28v=vs.80%29.aspx

    $csv = "C:\temp\Daten.txt"
    
    # Test CSV Datei anlegen
    # Out-File nutzt standardmässig utf-8 !
    #'Nachname, Name','Müller,Claudia','Gärtner,Sabine','Löwe,Kerßtin' | Out-File $csv
    
    
    # Codepages und Ihre Nummern  
    # http://msdn.microsoft.com/de-de/library/86hf4sb8%28v=vs.80%29.aspx
    
    # Test CSV Datei mit streamwriter anlegen
    $file = New-Object System.IO.StreamWriter ($csv, [System.Text.Encoding]::'utf-8')
    $file.Writeline('Nachname, Name') 
    $file.Writeline('Müller,Claudia')
    $file.Writeline('Gärtner,Sabine')
    $file.Writeline('Löwe,Kerßtin')
    $file.close()
    
    
    # ALte offene Excel instanzen killen
    #Get-Process -name Excel | Stop-Process
    
    # Excel Konstanten und Werte : http://www.datapigtechnologies.com/downloads/Excel_Enumerations.txt
    $xlWindows = 2
    $xlDelimited = 1
    $xlDoubleQuote = 1
    
    # Beispiel einer Excel Makrorecorder aufzeichnung 
    # Workbooks.OpenText Filename:="C:\Temp\Daten.txt", Origin:=xlWindows, _ 
    # StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ 
    # ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True _ 
    # , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _ 
    # Array(3, 1), Array(4, 2)), TrailingMinusNumbers:=True 
    #Excelapp
    
    $excel = New-Object -ComObject excel.application
    $excel.DisplayAlerts = $false
    $excel.Visible = $True
    
    # Methode OpenText Parameter
    # OpenText(Filename,Origin,StartRow,DataType,TextQualifier,ConsecutiveDelimiter,Tab,Semicolon,Comma,Space,Other,OtherChar,FieldInfo,TextVisualLayout,DecimalSeparator,ThousandsSeparator,TrailingMinusNumbers,Local) 
    # Siehe: http://msdn.microsoft.com/en-us/library/office/bb223513%28v=office.12%29.aspx 
    # und: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.opentext.aspx 
    
    
    # Codepages und Ihre Nummern  
    # http://msdn.microsoft.com/de-de/library/86hf4sb8%28v=vs.80%29.aspx
    
    # Methode OpenText (restliche Parameter werden nicht gebraucht)
    $excel.workbooks.OpenText($csv,65001,1,$xlDelimited,$xlDoubleQuote,$False,$False,$False,$True,$False,$False)


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!


    Mittwoch, 6. Februar 2013 12:03

Alle Antworten

  • > Gerne hätte ich ein Encoding welches Umlaute Akzeptiert.

    Dein Default Encoding (iso-8859-1 / Windows-1252) unterstützt Umlaute! ANSI ist nur ein (falscher) Name für den selben Kodierstandard.

    Bei mir überträgt dein Code auch problemlos Umlaute.

     

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Dienstag, 5. Februar 2013 15:41
    Moderator
  • Hatte ich mir beinahe gedacht. Problem ist, das File welches ich "bearbeite" wird nacher in excel eingelesen.

    Dort habe ich dann leider keine umlaute mehr.

    wenn ich das gleiche mit dem Out-File befehl mache, habe ich kein problem.

    Jedoch dauert dieser bei 60'000 zeilen + zulange. darum den StreamWriter.


    [ Im swiss. I'm sorry for my bad english writing ]

    Dienstag, 5. Februar 2013 16:22
  • Dann ist aber der Import nach Excel das Problem. Auch hier musst du dann die richtige Codierung auswählen:

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Dienstag, 5. Februar 2013 17:11
    Moderator
  • Den Import geht folgendermasen von statten:

    xlWindows=1252
    $xlDelimited=1
    $xlTextQualifierDoubleQuote=1
    $StartRow=1
    $Semicolon=$True
    $file = $SAPFileTXT
    
    
    $objExcel = New-Object -ComObject Excel.Application
    $objExcel.Visible = $true
    $objExcel.workbooks.OpenText($file,$xlWindows,$StartRow,$xlDelimited,$xlTextQualifierDoubleQuote,$false,$false,$Semicolon)

    laut dem artikel:

    http://msdn.microsoft.com/en-us/library/office/bb223513%28v=office.12%29.aspx

    sollte das so im encoding 1252 importiert werden?


    [ Im swiss. I'm sorry for my bad english writing ]

    Mittwoch, 6. Februar 2013 08:01
  • Sieh mal mein Opentext() Beispiel hier :
    http://social.technet.microsoft.com/Forums/de-DE/powershell_de/thread/c5f48b05-f868-4b32-9868-42d3cbbd2c80

    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Mittwoch, 6. Februar 2013 10:14
  • hab mir das angeschaut. bis auf das du mehr attribute verwendest. sehe ich keinen unterschied.

    wenn ich es mit all deinen attributen versuche, bekomm ich immernoch keine umlaute.

    wie gesagt, was ich komisch finde:

    mit der Out-File methode funktioniert es.

    mit dem streamwriter nicht.

    meiner meinung nach sollte das problem nicht beim excel liegen, da ich dort nichts geändert hab, sondern bei der methode welche das textfile erstellt was von excel importiert wird.


    [ Im swiss. I'm sorry for my bad english writing ]

    Mittwoch, 6. Februar 2013 10:28
  • Das geht bei mir mit utf-8 und Codepage 65001 !

    Codepages und Ihre Nummern siehe: 
    http://msdn.microsoft.com/de-de/library/86hf4sb8%28v=vs.80%29.aspx

    $csv = "C:\temp\Daten.txt"
    
    # Test CSV Datei anlegen
    # Out-File nutzt standardmässig utf-8 !
    #'Nachname, Name','Müller,Claudia','Gärtner,Sabine','Löwe,Kerßtin' | Out-File $csv
    
    
    # Codepages und Ihre Nummern  
    # http://msdn.microsoft.com/de-de/library/86hf4sb8%28v=vs.80%29.aspx
    
    # Test CSV Datei mit streamwriter anlegen
    $file = New-Object System.IO.StreamWriter ($csv, [System.Text.Encoding]::'utf-8')
    $file.Writeline('Nachname, Name') 
    $file.Writeline('Müller,Claudia')
    $file.Writeline('Gärtner,Sabine')
    $file.Writeline('Löwe,Kerßtin')
    $file.close()
    
    
    # ALte offene Excel instanzen killen
    #Get-Process -name Excel | Stop-Process
    
    # Excel Konstanten und Werte : http://www.datapigtechnologies.com/downloads/Excel_Enumerations.txt
    $xlWindows = 2
    $xlDelimited = 1
    $xlDoubleQuote = 1
    
    # Beispiel einer Excel Makrorecorder aufzeichnung 
    # Workbooks.OpenText Filename:="C:\Temp\Daten.txt", Origin:=xlWindows, _ 
    # StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ 
    # ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True _ 
    # , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _ 
    # Array(3, 1), Array(4, 2)), TrailingMinusNumbers:=True 
    #Excelapp
    
    $excel = New-Object -ComObject excel.application
    $excel.DisplayAlerts = $false
    $excel.Visible = $True
    
    # Methode OpenText Parameter
    # OpenText(Filename,Origin,StartRow,DataType,TextQualifier,ConsecutiveDelimiter,Tab,Semicolon,Comma,Space,Other,OtherChar,FieldInfo,TextVisualLayout,DecimalSeparator,ThousandsSeparator,TrailingMinusNumbers,Local) 
    # Siehe: http://msdn.microsoft.com/en-us/library/office/bb223513%28v=office.12%29.aspx 
    # und: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.opentext.aspx 
    
    
    # Codepages und Ihre Nummern  
    # http://msdn.microsoft.com/de-de/library/86hf4sb8%28v=vs.80%29.aspx
    
    # Methode OpenText (restliche Parameter werden nicht gebraucht)
    $excel.workbooks.OpenText($csv,65001,1,$xlDelimited,$xlDoubleQuote,$False,$False,$False,$True,$False,$False)


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!


    Mittwoch, 6. Februar 2013 12:03
  • Vielen dank.

    1. das umalute Problem ist mit code page 65001 gelöst.

    Jedoch habe ich nun das problem, dass das excel geöfnet wird, jedoch ohne anhand des ";" delimiters zu spliten.

    Danach schliest es sich gleich wieder.

    EDIT:

    Problem behoben.

    Warum? Weiss ich noch nicht.

    Code:

    $objExcel.workbooks.OpenText($file,$xlWindows,$StartRow,$xlDelimited,$xlTextQualifierDoubleQuote,$false,$false,$Semicolon)

    Funktioniert.

    Code:

    $objExcel.workbooks.OpenText($file,$xlWindows,1,$xlDelimited,$xlDoubleQuote,$False,$False,$False,$True,$False,$False,$Null,$FieldInfo)
    Funktioniert nicht, und führt zum genannten fehler.


    [ Im swiss. I'm sorry for my bad english writing ]


    Mittwoch, 6. Februar 2013 13:03
  • Schau dir die Dokumentation richtig an!

    $False,$False,$True,$False = Semicolon ist True ! Komma ist False!

    $False,$False,$False,$True = Komma ist True ! Semikolon ist False!



    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Mittwoch, 6. Februar 2013 13:44