StreamWriter(流,编码)在 PowerShell 中不起作用

StreamWriter(Stream, Encoding) not working in PowerShell

我想使用 Powershell 将文件从 UTF-16 转换为 ANSI,但遇到了一些我不理解的行为。

我的(简化)脚本是

$encoding = [System.Text.Encoding]::GetEncoding(1250)

$sr = New-Object System.IO.StreamReader -Arg c:\utf16.txt
$sw = New-Object System.IO.StreamWriter c:\new.txt, $false, $encoding

 while ($line = $sr.ReadLine()) {
    $sw.WriteLine($line)
 }

$sr.close()
$sw.Close()

这工作正常,输出 new.txt 采用 ANSI 编码 但是,如果我更改

$sw = New-Object System.IO.StreamWriter c:\new.txt, $false, $encoding

$sw = New-Object System.IO.StreamWriter c:\new.txt, $encoding

输出 new.txt 采用 UTF-8 编码。 根据 StreamWriter Class 文档,这也是定义编码的有效 StreamWriter 构造函数。

我错过了什么?

汤姆

你错过了 C:\new.txt still 是一个 string,而不是 Stream对象。这意味着您在这种情况下将 StreamWriter(String, Boolean) constructor, not the StreamWriter(Stream, Encoding) constructor. $encoding is implicitly converted 调用为布尔值。前一个构造函数创建了一个 UTF-8 编写器,如下所述:

Remarks

This constructor creates a StreamWriter with UTF-8 encoding without a Byte-Order Mark [...]