Я запускаю следующий сценарий Powershell, чтобы объединить ряд выходных файлов в один файл CSV. whidataXX.htm
(где xx
- двухзначный порядковый номер), а количество создаваемых файлов варьируется от запуска до запуска.Почему конкатенация файлов Powershell конвертирует UTF8 в 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
}
}
}
В whidataXX.htm
файлы кодируются UTF8, но мой выходной файл закодирован UTF16. Когда я просматриваю файл в «Блокноте», он выглядит правильно, но когда я его просматриваю в Hex-редакторе, между каждым символом появляется значение Hex 00
, и когда я вытаскиваю файл в программу Java для обработки, файл печатает на консоль с дополнительными пробелами между c h a r a c t e r s
.
Во-первых, это нормально для PowerShell? или есть что-то в исходных файлах, которые могли бы вызвать это?
Во-вторых, как я могу исправить эту проблему кодирования в коде, отмеченном выше?
И чтобы подтвердить, добавление-контент просто добавит новые данные в существующий файл, правильно? – dwwilson66
Да. Это аналог Set-Content будет перезаписывать существующие данные. – mjolinor