Tôi đang chạy tập lệnh Powershell sau đây để nối một loạt tệp đầu ra vào một tệp CSV duy nhất. whidataXX.htm
(trong đó xx
là số có hai chữ số) và số lượng tệp được tạo thay đổi từ chạy đến chạy.Tại sao ghép nối tệp Powershell chuyển đổi UTF8 thành 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
tệp được mã UTF8, nhưng tệp đầu ra của tôi được mã hóa UTF16. Khi tôi xem tệp trong Notepad, nó xuất hiện chính xác, nhưng khi tôi xem nó trong Hex Editor, giá trị Hex 00
xuất hiện giữa mỗi ký tự và khi tôi kéo tệp vào chương trình Java để xử lý, tệp sẽ in ra bảng điều khiển có thêm khoảng cách giữa c h a r a c t e r s
.
Đầu tiên, điều này có bình thường đối với PowerShell không? hoặc có cái gì đó trong các tập tin nguồn sẽ gây ra điều này?
Thứ hai, làm cách nào để khắc phục sự cố mã hóa này trong mã được lưu ý ở trên?
Và để xác nhận, Add-Content sẽ chỉ thêm dữ liệu mới vào tệp hiện có, đúng không? – dwwilson66
Có. Đối tác Set-Content sẽ ghi đè dữ liệu hiện có. – mjolinor