của Windows PowerShell, không giống như các nền tảng .NET framework [1] , sử dụng giá trị mặc định sau:
trên đầu vào: file mà không có một BOM (byte dấu thứ tự) được giả định là trong mã hóa mặc định của hệ thống ing, đó là di sảnWindows code page ("ANSI" trang mã: mã hóa hoạt động, văn hóa cụ thể byte đơn, như cấu hình thông qua Control Panel).
trên đầu ra: các nhà khai thác >
và >>
chuyển hướng sản xuất UTF-16 LE file theo mặc định (mà ta có - và nhu cầu - một BOM).
cmdlet file tốn và -producing làm thường hỗ trợ một -Encoding
tham số cho phép bạn chỉ định mã hóa một cách rõ ràng.
Trước PowerShell v5.1, sử dụng lệnh ghép ngắn bên dưới Out-File
cơ bản là cách duy nhất để thay đổi mã hóa.
Trong PowerShell v5.1 +, >
và >>
trở thành bí danh có hiệu lực Out-File
, cho phép bạn thay đổi hành vi của mã hóa >
và >>
qua biến $PSDefaultParameterValues
sở thích; ví dụ:
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
.
Đối với PowerShell để xử lý UTF-8 đúng cách, bạn phải xác định nó như là cả mã hoá đầu vào và đầu ra [2] , nhưng lưu ý rằng trên đầu ra, PowerShell luôn bổ sung thêm một BOM sang UTF-8 các tập tin.
Áp dụng cho ví dụ của bạn:
Get-Content -Encoding utf8 .\utf8.txt | Out-File -Encoding utf8 out.txt
Để tạo một file UTF-8 mà không một BOM trong PowerShell, xem this answer của tôi.
Ngược lại, PowerShell Lõi, các cross-platform ấn bản của PowerShell, may mắn thay mặc định là BOM-less UTF-8 trên cả trong và đầu ra.
[1] Khuôn khổ .NET sử dụng UTF-8 theo mặc định, cả cho trong và đầu ra.
Sự khác biệt có chủ ý - này trong hành vi giữa PowerShell và khung .NET được xây dựng trên là khác thường.
[2] Get-Content
hiện, tuy nhiên, tự động nhận file UTF-8 với một BOM.