Ich führe das folgende PowerShell-Skript aus, um eine Reihe von Ausgabedateien in einer einzigen CSV-Datei zu verketten. whidataXX.htm
(wobei xx
eine zweistellige fortlaufende Nummer ist) und die Anzahl der erstellten Dateien variiert von Lauf zu Lauf.Warum konvertiert die Powershell-Dateiverkettung UTF8 in UTF16?
$metadataPath = "\\ServerPath\foo"
function concatenateMetadata {
$cFile = $metadataPath + "whiconcat.csv"
Clear-Content $cFile
$metadataFiles = gci $metadataPath
$iterations = $metadataFiles.Count
for ($i=0;$i -le $iterations-1;$i++) {
$iFile = "whidata"+$i+".htm"
$FileExists = (Test-Path $metadataPath$iFile -PathType Leaf)
if (!($FileExists))
{
break
}
elseif ($FileExists)
{
Write-Host "Adding " $metadataPath$iFile
Get-Content $metadataPath$iFile | Out-File $cFile -append
Write-Host "to" $cfile
}
}
}
Die whidataXX.htm
Dateien werden verschlüsselt UTF8, aber meine Ausgabedatei wird UTF16 codiert. Wenn ich die Datei in Editor anzeigen, scheint es korrekt, aber wenn ich es in einem Hex-Editor anzeigen, erscheint der Hex-Wert 00
zwischen jedem Zeichen, und wenn ich die Datei in ein Java-Programm zur Verarbeitung ziehen, wird die Datei auf der Konsole gedruckt mit zusätzlichen Leerzeichen zwischen c h a r a c t e r s
.
Erstens, ist das normal für PowerShell? oder gibt es etwas in den Quelldateien, das dies verursachen würde?
Zweitens, wie würde ich dieses Codierungsproblem in dem oben genannten Code beheben?
Und um zu bestätigen, fügt Add-Content einfach die neuen Daten an die vorhandene Datei an, richtig? – dwwilson66
Ja. Sein Gegenstück Set-Content überschreibt die vorhandenen Daten. – mjolinor