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.
Mein Ergebnis:
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>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 52927183021
Url: https://administrator.de/contentid/52927183021
Ausgedruckt am: 24.11.2024 um 18:11 Uhr
6 Kommentare
Neuester Kommentar
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
https://tio.run/##vVTRSsMwFH3vV4RSWIu26psgPszpQKZz2CoDkZG1d1s1TUqaqlP8DV ...
Gruß pp.
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.
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.
Hallo,
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
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
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