2008-09-16 13 views
40

UCS-2 olarak kaydedilmiş bir dosyam var Küçük Endian Kodlamayı değiştirmek istediğimden şu kodu çalıştırdım:Powershell: Get-Content Pipeline için Kodlamayı Ayarlama

cat tmp.log -encoding UTF8 > new.log 

Ortaya çıkan dosya hala UCS-2 Little Endian'da. Bu, boru hattı her zaman bu formatta olduğu için mi? Bunu UTF8 olarak yeni bir dosyaya aktarmanın kolay bir yolu var mı?

cevap

45

olarak here önerdi kodlayıcı seçeneği dosya okumak veya yazılı gerektiğini encdoing seçer olmasıdır Benim anlayış.

Kodlama ile xml dosyasından içerik yükleme
Get-Content tmp.log | Out-File -Encoding UTF8 new.log 
+0

Bunu yanıtladığınız için teşekkürler ... UTF-8 –

+1

'da kodlanmış bir xml dosyasını okurken bir sorun çözmeme yardımcı oldu. Şimdi bu aptal bayt sırasını nasıl silebilirim? – Qwertie

+2

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

17

böyle yapacağını:

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

+7

"gelmelerini Set-Content'e yardım et - bir seçenek olarak kodlamayı tanımlamaz, ancak aslında çalışır. – jedatu

+6

@jedatu: Bu parametre FileSystem sağlayıcısından geliyor. – Joey

2

.

(Get-İçerik -Encoding UTF8 $ fileName)

+1

Siz efendim beni kurtardınız! çok teşekkürler :) – ylka

+0

XML dosyalarını okumak için 'Get-Content' kullanmayın, çünkü bu dosya kodlaması hakkında önceden bilgi gerektirir. XML ayrıştırıcısının dosyayı kendi başına okumasına izin vermek çok daha iyidir; çünkü bu, dosyanın kodlamasını doğru bir şekilde yapabildiği için. $ xml = (Yeni Nesne System.Xml.XmlDocument) .Load ($ fileName) ' – Tomalak

1

bir XML dosyası okuyorsanız, burada XML dosyasının kodlama adapte daha da iyi bir yolu şudur:

$xml = New-Object -Typename XML 
$xml.load('foo.xml')