bahnski
Goto Top

Powershell System.Xml.XmlDocument Umlaute

Ich habe das Problem, das ich per Powershell ein XML erzeuge und ich es nicht schaffe das die Umlaute dort ganz normal sichtbar sind. Das XML wird nur unter Windows benötigt und muss auch über einen klassischen Editor lesbar bleiben.
Der angefügte Code ist nur ein Beispiel. Mein späterer Code prüft ob die XML Datei vorhanden ist, wenn nicht erstellt er sie, ansonsten ließt er sie ein und fügt Daten an. Daher nutze ich nicht XmlTextWriter. Das Ziel dieser Anfrage ist es, das Umlaute ganz normal sichtbar werden.
function New_Kontakt(){
    Param(
        [String]$New_Kontakt_Familienname,
        [String]$New_Kontakt_Vorname,
        [System.Xml.XmlDocument]$AddToXMLDoc
    )
    $xml_New_Kontakt = $AddToXMLDoc.CreateElement("Kontakt")  
    $xml_New_Kontakt_Familienname = $AddToXMLDoc.CreateElement("Familienname")  
    $xml_New_Kontakt_Familienname.InnerText = $New_Kontakt_Familienname
    $xml_New_Kontakt_Vorname = $AddToXMLDoc.CreateElement("Vorname")  
    $xml_New_Kontakt_Vorname.InnerText = $New_Kontakt_Vorname
    $Null = $xml_New_Kontakt.AppendChild($xml_New_Kontakt_Familienname)
    $Null = $xml_New_Kontakt.AppendChild($xml_New_Kontakt_Vorname)
    return $xml_New_Kontakt
}
$XMLFile = $PSScriptRoot + "\TestSave.xml"  
$xmlDocument = New-Object -TypeName System.Xml.XmlDocument
$null = $xmlDocument.AppendChild($xmlDocument.CreateXmlDeclaration('1.0', 'UTF-8', 'yes'));  
$xmlKontakte = $xmlDocument.AppendChild($xmldocument.CreateElement("Kontakte"))  
$Null = $xmlKontakte.AppendChild((New_Kontakt -New_Kontakt_Familienname "Östersund" -New_Kontakt_Vorname "Astrid" -AddToXMLDoc $xmlDocument))  
$Null = $xmlKontakte.AppendChild((New_Kontakt -New_Kontakt_Familienname "Bachstelze" -New_Kontakt_Vorname "Korinna" -AddToXMLDoc $xmlDocument))  
$Null = $xmlKontakte.AppendChild((New_Kontakt -New_Kontakt_Familienname "Blaße" -New_Kontakt_Vorname "Sébastian" -AddToXMLDoc $xmlDocument))  
$xmlDocument.Save($XMLFile)

Mein Ergebnis:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Kontakte>
  <Kontakt>
    <Familienname>Östersund</Familienname>
    <Vorname>Astrid</Vorname>
  </Kontakt>
  <Kontakt>
    <Familienname>Bachstelze</Familienname>
    <Vorname>Korinna</Vorname>
  </Kontakt>
  <Kontakt>
    <Familienname>Blaße</Familienname>
    <Vorname>Sébastian</Vorname>
  </Kontakt>
</Kontakte>

Content-Key: 52927183021

Url: https://administrator.de/contentid/52927183021

Printed on: April 27, 2024 at 09:04 o'clock

Member: rubberman
rubberman Mar 23, 2024 at 13:57:04 (UTC)
Goto Top
Hallo.

über einen klassischen Editor

Da steht "klassisch" wohl für antiquiert. Jeder halbwegs moderne Editor erkennt UTF-8 auch wenn dem Dateiinhalt kein BOM vorangestellt ist. Von was für einem Editor reden wir denn hier?

Grüße
Steffen
Member: bahnski
bahnski Mar 23, 2024 at 15:33:28 (UTC)
Goto Top
Z.B. Notepad++. Aber selbst in Visual Studio Code zeigt er mir die Umlaute nicht an.
Mitglied: 12168552861
Solution 12168552861 Mar 23, 2024 updated at 17:27:12 (UTC)
Goto Top
That's by design.
In Notepad++ unten rechts das Skript umstellen/konvertieren auf UTF-8 mit BOM dann neu speichern, dann klappts auch mit der Nachbarin und den Umlauten in der XML unter Windows.

Guckst du den Beitrag mit gleichem Problem vom Kollegen

Powershell Variable wird mit falschem Encoding ausgegeben

Wird hier auch nochmal detailliert beschrieben
about_Character_Encoding

Das Erstellen von PowerShell-Skripts auf einer Unix-ähnlichen Plattform oder die Verwendung eines plattformübergreifenden Editors unter Windows, z. B. Visual Studio Code, führt zu einer dateicodierten Verwendung UTF8NoBOM. Diese Dateien funktionieren in PowerShell einwandfrei, können aber in Windows PowerShell unterbrechen, wenn die Datei Nicht-Ascii-Zeichen enthält.
Wenn Sie Nicht-Ascii-Zeichen in Ihren Skripts verwenden müssen, speichern Sie sie mit BOM als UTF-8. Ohne die BOM interpretiert Windows PowerShell Ihr Skript als codiert in der älteren "ANSI"-Codepage.


https://tio.run/##vVTRSsMwFH3vV4RSWIu26psgPszpQKZz2CoDkZG1d1s1TUqaqlP8DV ...

Gruß pp.
Member: bahnski
bahnski Mar 23, 2024 at 18:44:57 (UTC)
Goto Top
Danke an puderpader das ist die Lösung. In Visual Studio Code die Codierung auf UTF-8 mit BOM umstellen. Dann klappt es. Danke.
Member: Pjordorf
Pjordorf Mar 23, 2024 at 19:16:00 (UTC)
Goto Top
Hallo,

Zitat von @bahnski:
In Visual Studio Code die Codierung auf UTF-8 mit BOM umstellen.
Dann solltest du mal nachlesen was es mit BOM auf sich hat. Fürn anfang https://de.wikipedia.org/wiki/Byte_Order_Mark

Gruss,
Peter
Member: rubberman
rubberman Mar 23, 2024 at 23:14:40 (UTC)
Goto Top
Z.B. Notepad++. Aber selbst in Visual Studio Code zeigt er mir die Umlaute nicht an.

Ich kann mit beiden Editoren diese Problem nicht nachvollziehen. Selbst der Windows Editor (a.k.a. notepad.exe) erkennt seit Win10 UTF-8 ohne BOM problemlos und speichert neu erstellte Dateien standardmäßig so codiert.

Grüße
Steffen