Unicode XML

Nemrég abban kérték a segítségem, hogy egy PowerShell script segítségével készített xml állomány kódolását miként lehet megváltoztatni, ugyanis azt eredetileg UTF8-ban mentették le, nekik ez viszont nem felelt meg.

Amennyiben (mint jelen esetben) egy már létező adattal dolgozunk, az alábbi példában a $XML változóban hivatkozok rá, ha viszont még nincs, akkor pl. az alábbi utasítással hozhatjuk létre:

$XML = New-Object System.Xml.XmlDocument

A kódolás változtatására a neten keresgélve több módszert is találhatunk. Ezekből próbáltam egyet megfelelően összeállítani, amely még ha nem is működik minden esetben, de az adott cél elérésében segített (az adott sorba mindenki másolja a neki megfelelő kódolást). Amit viszont “csak” dokumentáltam, hogy a különböző Unicode kódolások eléréséhez milyen paramétereket kell megadni – ez azért fontos, mert van olyan kódolás, ahova 1, van, ahol 2 paramétert kell kötelező módon megadni (minden esetben a BOM az utolsó paraméter):

# Encoding types, just for listing

# UTF8

$UTF8WithoutBom = New-Object System.Text.UTF8Encoding($false)

$UTF8WithBom = New-Object System.Text.UTF8Encoding($true)

# UTF16

$UnicodeLEWithoutBOM = New-Object System.Text.UnicodeEncoding($false,$false)

$UnicodeLEWithBOM = New-Object System.Text.UnicodeEncoding($false,$true)

$UnicodeBEWithoutBOM = New-Object System.Text.UnicodeEncoding($true,$false)

$UnicodeBEWithBOM = New-Object System.Text.UnicodeEncoding($true,$true)

# UTF32

$UTF32LEWithoutBOM = New-Object System.Text.UTF32Encoding($false,$false)

$UTF32LEWithBOM = New-Object System.Text.UTF32Encoding($false,$true)

$UTF32BEWithoutBOM = New-Object System.Text.UTF32Encoding($true,$false)

$UTF32BEWithBOM = New-Object System.Text.UTF32Encoding($true,$true)

# End listing

 

$FileName = “$Path\$name.xml

$File = New-Object System.IO.StreamWriter($FileName, $false, $UnicodeLEWithoutBOM)

$XML.Save($File)

$File.Close()

Ez a része kipipálva 😊

Forrás: https://asteriksz.wordpress.com/