公然mojibake情況。讓我們接下來的測試腳本,在這裏簡單的控制檯應用程序CliParser.exe
呼應的命令行參數(寫在C
,啓發here)
$destFile="d:\test\35909655-UTF8.txt"
Remove-Item $destFile
###
### [Console]::OutputEncoding = [System.Text.Encoding]::Default
###
$output = & "d:\bat\CliParser.exe" äöü
$output | Out-File -Append -Encoding UTF8 -filepath $destFile
"{0} {1} {2}" -f "Console code pages", [System.Console]::OutputEncoding.WindowsCodePage,
[System.Console]::OutputEncoding.CodePage
"{0} {1} {2}" -f "System code pages", [System.Text.Encoding]::Default.WindowsCodePage,
[System.Text.Encoding]::Default.CodePage
輸出在各種情況下顯示的代碼頁差異;輸出文件UTF-8
編碼,以便get-content
將顯示它正確地考慮活動代碼頁(見下文chcp 437
):
==> chcp 850
Active code page: 850
==> powershell D:\PShell\SO\35909655.ps1
Console code pages 1252 850
System code pages 1250 1250
==> powershell get-content "d:\test\35909655-UTF8.txt"
param 0 = D:\bat\CliParser.exe
param 1 = õ÷³
==> chcp 1250
Active code page: 1250
==> powershell D:\PShell\SO\35909655.ps1
Console code pages 1250 1250
System code pages 1250 1250
==> chcp 437
Active code page: 437
==> powershell get-content "d:\test\35909655-UTF8.txt"
param 0 = D:\bat\CliParser.exe
param 1 = äöü
==>
請忘記,在上面的輸出中出現的代碼頁1252
(這只是我的默認)。
答:爲了治療的情況下Powesthell腳本,使用(刪除領先###
)
[Console]::OutputEncoding = [System.Text.Encoding]::Default
這應該工作。也許文件已經存在,並使用不同的編碼。刪除'$ destFile'並重試。 –
刪除$ destFile沒有幫助。 – wima