2008-09-16 18 views
40

Tôi có một tập tin lưu lại dưới dạng UCS-2 Little Endian Tôi muốn thay đổi mã hóa vì vậy tôi chạy đoạn mã sau:Powershell: Thiết Encoding cho Get-Content Pipeline

cat tmp.log -encoding UTF8 > new.log 

Các tập tin kết quả vẫn còn trong UCS -2 Little Endian. Đây có phải là do đường ống luôn ở định dạng đó không? Có một cách dễ dàng để ống này vào một tập tin mới như UTF8?

Trả lời

45

Như đã đề cập here:.

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

Cảm ơn bạn đã trả lời câu hỏi này ... Nó đã giúp tôi tìm ra một vấn đề khi đọc một tệp xml được mã hóa theo UTF-8 –

+1

Bây giờ, làm thế nào để loại bỏ được dấu thứ tự byte ngu ngốc đó? – Qwertie

+2

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

17

tôi sẽ làm điều đó như thế này:

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

sự hiểu biết của tôi là sự lựa chọn -encoding chọn encdoing rằng các tập tin cần được đọc hoặc viết bằng

+7

"GET Trợ giúp Set-Content "không xác định-mã hóa như là một lựa chọn, nhưng nó trong thực tế làm việc. – jedatu

+6

@jedatu: Đó là vì thông số này đến từ nhà cung cấp Hệ thống tệp. – Joey

2

tải nội dung từ tệp xml bằng mã hóa.

(Get-Content -Encoding UTF8 $ fileName)

+1

Bạn đã cứu tôi! cảm ơn rất nhiều :) – ylka

+0

Không sử dụng 'Get-Content' để đọc các tệp XML, vì điều này đòi hỏi kiến ​​thức trước về việc mã hóa tệp. Tốt hơn hết là để cho trình phân tích cú pháp XML đọc tệp trên chính nó, vì điều này giải quyết chính xác với bất kỳ mã hóa nào mà tệp có thể có. '$ xml = (Hệ thống đối tượng mới.Xml.XmlDocument) .Load ($ fileName)' – Tomalak

1

Nếu bạn đang đọc một tập tin XML, đây là một cách tốt hơn mà thích nghi với mã hóa của file XML của bạn:

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