2016-08-09 6 views
0

Ich habe derzeit ein Problem mit der Out-File CMDlet, die ich zum Erstellen einer Protokolldatei verwenden. Das funktioniert ganz gut, aber ich kann PowerShell nicht zwingen, die deutschen Umlaute korrekt zu exportieren. Was ich versucht war:Exportieren von deutschen Umlauten mit PowerShell 3 von Out-File CMDlet

  • die Skriptdatei mit UTF-8-Codierung speichern (I Sublime Text als Editor verwenden)
  • eine vorhandene Textdatei angehängt, die ich mit MS Notepad gespeichert, bevor (Out-File Cmdlets verwendet seine -Append Parameter in diesem Fall ist, andernfalls wird eine neue Datei erzeugt, die Unicode-Codierung hat, wenn der Parameter -Encoding nicht anders festgelegt)
  • Verwendung "My String" | Out-File "xyz.log" -Encoding utf8 während die -Encoding Parameter die Zeichenfolge Export mit UTF-8-Codierung behandeln soll; den Wert utf8 von -Encoding mit doppelten Anführungszeichen spezifiziert ("My String" | Out-File "xyz.log" -Encoding "utf8") funktioniert nicht wie gut

Microsoft's Developer Network und andere Threads auf Stackoverflow konnte nicht wirklich mein Problem lösen. Kennt jemand eine Lösung oder zumindest eine Problemumgehung für dieses Problem?

+0

Kann nicht reproduziert werden. '" äöü "| Out-File "xyz.log" -Encoding utf8' funktioniert gut. –

+0

Vielen Dank für Ihr Feedback. Während meiner Recherche zu diesem Thema habe ich viele andere Threads auf verschiedenen Plattformen gefunden, auf denen Leute mit diesem Problem konfrontiert wurden. Vielleicht gibt es einen globalen Encoding-Parameter in PowerShell oder irgendeine andere Konfiguration, die in meinem Fall nicht korrekt ist. –

Antwort

0

Ich habe einen Workaround für mein Problem viel schneller gefunden, als ich zuvor dachte. Ich habe jeden Umlaut in einer Protokollierungszeichenfolge mit seinem Unicode-Wert ersetzt. Dafür habe ich ein Array $umlauts von Arrays erstellt, die den jeweiligen Umlaut mit seinem Unicode-Wert enthalten.

Was sollten Sie auch konzentrieren sich auf Ihre Logging-String in einzelne Anführungszeichen wickeln ('äöü') aufgrund der Tatsache, dass Powershell Probleme mit Umlauten und doppelte Anführungszeichen ("äöü") zu haben scheint.

UPDATE 1: Wie n3wjack erwähnt, hat eine Zeichenfolge mit Umlauten in einfachen Anführungszeichen eingewickelt werden, so dass Powershell jedes Zeichen behandelt „wie es ist“.

Hier ist meine Implementierung für das, was ich oben beschrieben:

function Out-LogFile ($str) { 
    $umlauts = @(
     @('Ä',[char]0x00C4), 
     @('Ö',[char]0x00D6), 
     @('Ü',[char]0x00DC), 
     @('ä',[char]0x00E4), 
     @('ö',[char]0x00F6), 
     @('ü',[char]0x00FC) 
    ) 

    foreach ($umlaut in $umlauts) { 
     $str = $str -replace $umlaut[0],$umlaut[1] 
    } 

    $str | Out-File "myfile.txt" 
    return $str 
} 

Out-LogFile 'ÄÖÜäöü' 

UPDATE 2: Ich bemerkte, dass n3wjack Tipp meine Implementierung obsolet macht. Indem Sie den Log-Text einfach in einzelne Quotierungszeichen (wie 'äöü' | Out-File "file.log") wickeln, werden alle Umlaute korrekt exportiert. Vielen Dank!

+1

Seltsam. Das scheint mir gut zu gehen. Wie auch immer, es gibt einen Unterschied darin, wie PS einfache und doppelte Anführungszeichen behandelt. Es wird eine Zeichenfolge in einfachen Anführungszeichen stehen lassen. Bei einer Zeichenfolge in doppelten Anführungszeichen wird überprüft, ob eine Variable ersetzt werden muss, z. B. "Hallo $ name", wobei $ name Ihre zu ersetzende Variable ist. Wenn Sie die gleiche Zeichenfolge in einfachen Anführungszeichen haben, wird sie als Literal ausgegeben. – n3wjack

+0

Vielen Dank für Ihr Feedback und Ihren Tipp bezüglich der Anführungszeichen. Ich werde das meiner Erklärung hinzufügen. –

Verwandte Themen