Okna PowerShell, w przeciwieństwie do podstawowej struktury .NET [1] , wykorzystuje następujące domyślne:
na wejście: Pliki bez BOM (bajt -order mark) zakłada się w domyślny ENCOD systemu ing, który jest LegacyWindows code page („ANSI” strona Kod: kodowanie aktywne kultury specyficzne jednobajtowe, zgodnie z konfiguracją z panelu sterowania).
na wyjście: operatory przekierowania >
i >>
produkować UTF-16 LE plików Domyślnie (który mam - i trzeba - BOM).
pliku czasochłonne i produkującego cmdlets nie zwykle obsługują parametr-Encoding
który pozwala określić kodowanie w sposób jawny.
Przed PowerShell v5.1, użycie polecenia cmdlet Out-File
jawnie było jedynym sposobem na zmianę kodowania.
W PowerShell v5.1 +, >
i >>
stał skutecznych aliasy Out-File
, co pozwala na zmianę zachowania kodowania >
i >>
poprzez zmienną $PSDefaultParameterValues
preferencji; np .:
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
.
Dla PowerShell do obsługi UTF-8 poprawnie, należy określić go jako zarówno kodowania wejściowego i wyjściowego [2] , ale należy pamiętać, że na wyjściu, PowerShell niezmiennie dodaje BOM UTF-8 akta.
zastosowana do przykładu:
Get-Content -Encoding utf8 .\utf8.txt | Out-File -Encoding utf8 out.txt
Aby utworzyć plik UTF-8 bez LM w PowerShell, zobacz this answer kopalni.
Natomiast PowerShell Rdzeń The wieloplatformowy edycja PowerShell, na szczęście domyślnie BOM mniej UTF-8 na oba wejścia i wyjścia.
[1] NET wykorzystuje UTF-8 domyślnie zarówno dla wejścia i wyjścia.
To - zamierzone - różnice w zachowaniu między programem PowerShell i platformą .NET, na którym jest on zbudowany, to: nietypowy.
[2] Get-Content
jednak, automatycznie rozpoznaje UTF-8 plików z LM.