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-ID: 52927183021

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

Ausgedruckt am: 24.11.2024 um 18:11 Uhr

rubberman
rubberman 23.03.2024 um 14:57:04 Uhr
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
bahnski
bahnski 23.03.2024 um 16:33:28 Uhr
Goto Top
Z.B. Notepad++. Aber selbst in Visual Studio Code zeigt er mir die Umlaute nicht an.
12168552861
Lösung 12168552861 23.03.2024 aktualisiert um 18:27:12 Uhr
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.
bahnski
bahnski 23.03.2024 um 19:44:57 Uhr
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.
Pjordorf
Pjordorf 23.03.2024 um 20:16:00 Uhr
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
rubberman
rubberman 24.03.2024 um 00:14:40 Uhr
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