PowerShell mặc định để phát UTF-8 thay vì UTF-16?


31

Theo mặc định, PowerShell trong Windows dường như xuất ra UTF-16 (ví dụ: nếu tôi làm đơn giản echo hello > hi.txt, thì hi.txtkết thúc bằng UTF-16). Tôi biết rằng tôi có thể buộc điều này vào mã hóa văn bản mong muốn của mình bằng cách thay vào đó echo hello | out-file -encoding utf8 hi.txt, nhưng điều tôi muốn là nó chỉ là mặc định khi tôi sử dụng toán tử chuyển hướng. Có bất kì cách nào để đạt được điều này không?


1
cảm ơn vì lời khuyên cho một sự thay thế, đôi khi thực hiện việc này từ thiết bị đầu cuối có thể nhanh hơn trình soạn thảo văn bản.
Todd Partridge

Trong Powershell 6.0, điều này đã được đưa ra không cần thiết - Powershell hiện mặc định là UTF-8 mà không cần mã hóa để chuyển hướng. Xem github.com/PowerShell/PowerShell/issues/4878
kumarharsh

Câu trả lời:


21

Sử dụng trình dịch ngược .NET trên cụm System.Man Quản lý. Tự động hóa (còn gọi là "Microsoft Windows PowerShell Engine Core hội") tiết lộ đoạn mã này:

// class: System.Management.Automation.RedirectionNode
private PipelineProcessor BuildRedirectionPipeline(string path, ExecutionContext context)
{
    CommandProcessorBase commandProcessorBase = context.CreateCommand("out-file");
    commandProcessorBase.AddParameter("-encoding", "unicode");
    if (this.Appending)
    {
        commandProcessorBase.AddParameter("-append", true);
    }
    commandProcessorBase.AddParameter("-filepath", path);
    ...

Vì vậy, nó trông khá cứng đối với tôi.

FYI, đây là trên hệ thống Windows 7 Enterprise x64 được cài đặt PowerShell 2.0.


5
Thật không may, vẫn được mã hóa trong PowerShell 5 trên Windows 10, thật không may:CommandParameterInternal.CreateParameterWithArgument(PositionUtilities.EmptyExtent, "Encoding", "-Encoding:", PositionUtilities.EmptyExtent, "Unicode", false, false);
Artfunkel

3

Không chắc chắn nếu điều này sẽ làm chính xác những gì bạn đang tìm kiếm, nhưng bạn có thể thử đặt biến môi trường như được đề cập ở đây

$OutputEncoding = New-Object -typename System.Text.UTF8Encoding

2
Tôi không nghĩ $OutputEncodinglà khá những gì tôi cần; được đặt thành ASCII trong PowerShell và ảnh hưởng đến cách mọi thứ được hiển thị . Những gì tôi muốn làm là thay đổi định dạng của văn bản được lưu trong một tệp, mà (AFAICT) khác với những gì $OutputEncodingkiểm soát.
Benjamin Pollack
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.