StreamWriter(Stream,Encoding)在PowerShell中不起作用

时间:2018-02-02 16:58:17

标签: powershell streamwriter

我想用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编码。 根据{{​​3}}文档,这也是一个有效的StreamWriter构造函数来定义编码。

我错过了什么?

汤姆

1 个答案:

答案 0 :(得分:3)

您遗漏的是C:\new.txt 仍然字符串,而不是 Stream对象。这意味着您正在调用StreamWriter(String, Boolean)构造函数,而不是StreamWriter(Stream, Encoding)构造函数。在此上下文中,$encodingimplicitly converted为布尔值。前一个构造函数创建了一个UTF-8编写器,如下所示:

  

<强>说明

     

此构造函数使用UTF-8编码创建一个没有字节顺序标记的StreamWriter [...]