2008-09-16 20 views
40

Mam plik zapisany jako UCS-2 Little Endian Chcę zmienić kodowanie więc wpadłem na następujący kod:PowerShell: Ustawienie kodowania dla Pipeline Get-Content

cat tmp.log -encoding UTF8 > new.log 

Plik wynikowy jest nadal w LUW -2 Little Endian. Czy to dlatego, że potok jest zawsze w tym formacie? Czy istnieje prosty sposób potokowania tego do nowego pliku jako UTF8?

Odpowiedz

45

Jak sugeruje here.

Get-Content tmp.log | Out-File -Encoding UTF8 new.log 
+0

Dzięki za odpowiedź na to ... Pomogło mi znaleźć problem z odczytywaniem pliku XML zakodowanego w UTF-8 –

+1

Teraz jak pozbyć się tego głupiego znaku porządku bajtów? – Qwertie

+2

Zobacz http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom –

17

zrobiłbym to tak:

get-content tmp.log -encoding Unicode | set-content new.log -encoding UTF8 

Rozumiem, że opcja -encoding wybiera encdoing że plik powinien być odczytany i wprowadzony w

+7

„Get- Help Set-Content "nie identyfikuje -kodowania jako opcji, ale w rzeczywistości działa. – jedatu

+6

@jedatu: To dlatego, że ten parametr pochodzi od dostawcy FileSystem. – Joey

2

ładowanie treści z pliku xml za pomocą kodowania.

(Get-Content -Encoding UTF8 $ filename)

+1

Ty mnie uratowałeś! bardzo dziękuję :) – ylka

+0

Nie używaj 'Get-Content' do odczytywania plików XML, ponieważ wymaga to wcześniejszej znajomości kodowania plików. Znacznie lepiej pozwolić analizatorowi XML odczytywać plik we własnym zakresie, ponieważ poprawnie obsługuje on wszelkie kodowanie, jakie może mieć plik. '$ xml = (New-Object System.Xml.XmlDocument) .Load ($ fileName)' – Tomalak

1

Jeśli czytasz plik XML, tutaj jest jeszcze lepszy sposób, który dostosowuje się do kodowania pliku XML:

$xml = New-Object -Typename XML 
$xml.load('foo.xml') 
Powiązane problemy