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 [...]
我想使用 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 [...]