2016-06-11 9 views
10

Utwórz plik utf8.txt. Upewnij się, że kodowanie ma format UTF-8 (brak specyfikacji materiałowej). Ustawić jego zawartość do Jak kot UTF-8 (bez BOM) złożyć prawidłowo/globalnie w PowerShell?

W cmd.exe:

type utf8.txt > out.txt

Zawartość out.txt jest

W PowerShell (V4):

cat .\utf8.txt > out.txt

lub

type .\utf8.txt > out.txt

out.txt treść jest €

Jak prawidłowo zrobić globalnie pracę PowerShell?

Odpowiedz

12

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.